Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
1

auto в C++: развитие или деградация?

29.08.2015, 15:18. Показов 3041. Ответов 59
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Цитата Сообщение от castorsky Посмотреть сообщение
Важно то, что c++ хоть как-то подтягивается к развитым языкам.
А в чем развитие то? Я вижу только деградацию... вводить такую фигню только ради сокращения записи т.е синтактического сахара?

 Комментарий модератора 
Данная тема вынесена из отсюда.
Стартовый пост является ответом на это сообщение.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2015, 15:18
Ответы с готовыми решениями:

Деградация общество или что-то еще
В наше время людей интересует больше всего деньги, алкоголь/наркотики, секс. Это было всегда, или в...

Некорректно работают функции Auto-Tone, Auto contrast, Auto color
Не корректно работают функции Auto-Tone, Auto contrast, Auto color. Вот пример (как на картинке)....

Auto lisp аналог let или варианты определения локальных фугкций
сабж + visual lisp

Деградация рейда 1
Добрый день, подскажите по деградации диска, использовалось 3 диска (2 ssd на 120гб и один обычный...

59
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.08.2015, 04:23 41
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от castorsky Посмотреть сообщение
Я не понимаю что подразумевается под "изнасилованием"
У c++ слабая статическая типизация.
я не вел речь о том, сильная она, или слабая.
я вел речь о том, что она - статическая.

когда речь заходит о статике,
возможности манипулирования типами становятся особенно критичными.
сишка например - убогий язык в этом отношении.

-----------------------------------------------

по поводу сильной/слабой - язык поддерживает оби возможности.
можно запрещать неявное приведение.
можно не запрещать.


даже более того, с++ поддерживает динамическую типизацию:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// arg - универсальный тип данных
// способен принимать значения любых типов
// и выдавать их обратно наружу
// при этом выполняется рантайм проверка корректности приведения типов
// и их квалификаторов
 
void foo( arg a )
{
    std::cout << a <<std::endl;
 
    if(a.is<int>())
    {
        int v = a; 
        std::cout << v << std::endl;
    }
}
 
int main()
{
    foo(10);
    foo("hello world");
}
и тд, и тп.

где то на хабре есть статья, в которой автор приводит примеры,
иллюстрирующие, что мультипарадигменный с++
умеет все эти различные "классификации" типизаций.

а достигается это благодаря мощнейшей системе типов,
которая позволяет как угодно манипулировать ими в статике
(метапрограммирование)

именно эту систему типов я и называю "системой изнасилования типов".

Добавлено через 1 минуту
Цитата Сообщение от castorsky Посмотреть сообщение
SML например.
впервые про такой вообще слышу.

сейчас гляну, что за фрукт...

Добавлено через 26 минут
глянул:
не мэйнстрим.
к тому же функциональная хрень.

может быть у него действительно мощная система типов,
однако на вскидку я ничего такого в примерах не разглядел.
а изучать язык на котором пишут полторы калеки,
что бы оценить её - как то влом.
1
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
30.08.2015, 12:13 42
Цитата Сообщение от hoggy Посмотреть сообщение
глянул:
не мэйнстрим.
к тому же функциональная хрень.
Ну как и ожидалось. Полторы безграмотных калеки рассуждают на темы концепций ЯП. Наследники: haskell, ocaml, F# (я ожидал что Вы не знаете). Системы типов те же.

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Ну так есть вывод или нет?
Вы же плюсист. Почему Вы меня об этом спрашиваете? Это я Вас должен спршивать.
Кликните здесь для просмотра всего текста
Цитата Сообщение от Avazart Посмотреть сообщение
размыления на тему "хороших языков" мне было не интересно совсем
Именно поэтому Вы решили спросить о востребованности. Я понял флейм ради флейма. Что это:
Цитата Сообщение от Avazart Посмотреть сообщение
Лично я предпочитаю явно выражать свои намерения в коде, а не мучать читающего загадками.
Т.е. понятно что auto можно использовать умеренно и с умом, но ведь легче то пихать везде и подряд...
Именно по этому я бы не сказал что это великое дoстижение.
?
Это хоть как-то можно натянуть на "аргумент от специалиста"? Это больше похоже на лулзы от Дурнева.
Цитата Сообщение от Avazart Посмотреть сообщение
Не нравится С++ не чего вообще в этом разделе торчать...
Ok, прежде чем постить тут буду спрашивать у Вас разрешение. Я довольно продуктивно (надеюсь) пообщался с ТС.

0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2015, 12:23  [ТС] 43
Цитата Сообщение от castorsky Посмотреть сообщение
Вы же плюсист. Почему Вы меня об этом спрашиваете? Это я Вас должен спршивать.
По тому что вы путаетесь "в показаниях"...
И уже не понято вы говорите от "выводе" какой на данный момент существует в языке С++ (а конкретно про auto), или о каком-то другом с созвездия Андромеда.

Цитата Сообщение от castorsky Посмотреть сообщение
Это хоть как-то можно натянуть на "аргумент от специалиста"? Это больше похоже на лулзы от Дурнева.
Это личное мнение... И думал что так очевидно что "сахар" вряд ли можно считать велиуим достижением.
Аргументов что это не только "сахар" лично от вас я вообще не услышал.
Только витание в облаках и филосовствования на тему быть или не быть.

Не по теме:


Цитата Сообщение от castorsky Посмотреть сообщение
Ok, прежде чем постить тут буду спрашивать у Вас разрешение.
Было бы не плохо ... :D

0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
30.08.2015, 12:29 44

Не по теме:

Я не виноват что мне попался тупой "следователь". Объективно тупой. Реально. Это даже не сойдет за оскорбление, это факт. Вот Вы плюсист. Скажите мне есть в плюсах вывод типов или нет. Это язык с которым Вы работаете ежедневно и обязаны его знать.

Не по теме:

Хотя бы его, как минимум.



Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Это личное мнение...
В следующий раз предваряйте термином IMHO, чтобы люди понимали что это комментировать не стоит.



Добавлено через 38 секунд

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
И я вроде ясно выразился и думал что так очевидно что "сахар" вряд ли можно считать достижением.
Это не только сахар. Сахар это уже побочное явление.

0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2015, 12:39  [ТС] 45
Цитата Сообщение от castorsky Посмотреть сообщение
В следующий раз предваряйте термином IMHO, чтобы люди понимали что это комментировать не стоит.
А вы читать по русски не умеете? Или потребность в абривиатурах?
Цитата Сообщение от Avazart Посмотреть сообщение
Лично я предпочитаю явно выражать свои намерения в коде,
Добавлено через 1 минуту
Цитата Сообщение от castorsky Посмотреть сообщение
Я не виноват что мне попался тупой следователь. Объективно тупой. Реально. Это даже не сойдет за оскорбление, это факт.
Возможно, но не достаточно тупой что бы вестись на столь низкие провокации.
Если вы путаетесь, если вы не можете говорить конкретно что подразумевает под теми или иными вещами о которых идет речь в теме, то проблема в вас, а не в комто другом. А так заходить в тему что бы оставить мессадж тип "С++ гавно, потому что гавно" кудо больше говорит о культуре и ваших умственных способностях.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.08.2015, 13:09 46
Цитата Сообщение от castorsky Посмотреть сообщение
Ну как и ожидалось. Полторы безграмотных калеки рассуждают на темы концепций ЯП. Наследники: haskell, ocaml, F# (я ожидал что Вы не знаете).
не понятна эта фраза.
и кто тут рассуждает на темы концепций ЯП?

если только вы имели ввиду:
полторы господина castorsky.
---------------------------------------------------------------

что касается системы типов:

с++ оопнутый, к тому же императивный (по большей части).

здесь манипуляция с типами особенно критична в контексте классов.
а это означает:
возможность влиять на иерархию классов.

а это означает:
вывод типов времени компиляции, и в зависимости от,
дальнейшее построение иерархии.

при этом, с++ умеет метапрограммирование как в функциональном,
так и в императивных стилях.

примечательно, что его дальнейшее развитие пошло по императивному пути
(constexpr)
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.08.2015, 13:45 47
Цитата Сообщение от Avazart Посмотреть сообщение
Каким боком тут auto?
никаким.

auto - действительно лишь сахар.
но это полезный сахар:
позволяет писать код в утиной нотации,

когда фактический тип не имеет значения ни для логики выполнения,
ни для чтения самого кода.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2015, 14:34  [ТС] 48
Цитата Сообщение от hoggy Посмотреть сообщение
позволяет писать код в утиной нотации,
Вы имеете ввиду чисто "внешне" ?
Типа то выводятся все равно во время компиляции, а не исполнения.

Добавлено через 34 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
и его итераторы.
Ну если мы делаем ++i то вероятно должны знать что за тип i, по крайней мере желательно знать.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.08.2015, 14:51 49
Цитата Сообщение от Avazart Посмотреть сообщение
Ну если мы делаем ++i то вероятно должны знать что за тип i, по крайней мере желательно знать.
зачем?
достаточно понимать:
чем бы оно ни было, но оно умеет инкремент.

а для того, что бы это понять, знать тип не обязательно.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2015, 15:05  [ТС] 50
Цитата Сообщение от hoggy Посмотреть сообщение
чем бы оно ни было, но оно умеет инкремент.
Да но "оно" зависит от контейнера, для того что бы узнать
(например нам не удалось сменить вектор на список ибо он не поддерживает концепцию, но мы пока этого не знаем)
нужно открывать контейнер - смотреть что за итератор он использует и только потом окрывать класс итератора что бы убидится что в нем есть инкремент...

Т.е когда возникают "проблемы" то неплохобы видеть что за типы используются.

К примеру:
C++
1
auto a=  widget->children(1)->items(2)->someYet()->...
Вот пойми сразу что такое a.
Тут явное усложнение "навигации" по коду.

Понятно что это конечно вопрос вменяемого использования...
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.08.2015, 15:36 51
Цитата Сообщение от Avazart Посмотреть сообщение
Да но "оно" зависит от контейнера, для того что бы узнать
(например нам не удалось сменить вектор на список ибо он не поддерживает концепцию, но мы пока этого не знаем)
нужно открывать контейнер - смотреть что за итератор он использует и только потом окрывать класс итератора что бы убидится что в нем есть инкремент...
как то у вас все слишком сложно.

я запускаю компиляцию, и через несколько секунд узнаю
удовлетворяют ли типы потребностям бизнес-логики.

смотреть "что там за контейнер" нужно лишь в случае проблем.

но в случае проблем, смотреть придется в любом случае,
что с auto, что без него.

единственное:
с auto меньше нужно писать/переписывать буковок.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2015, 15:40  [ТС] 52
Цитата Сообщение от hoggy Посмотреть сообщение
я запускаю компиляцию,
Вероятно смотреть и сразу видеть ошибку, и видить ее после перекомпиляции(возможно долгой) не одно и тоже.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.08.2015, 15:41 53
Цитата Сообщение от Avazart Посмотреть сообщение
К примеру:
auto a= *widget->children(1)->items(2)->someYet()->...
Вот пойми сразу что такое a.
а если так:
C++
1
2
3
auto& rootWindow = *widget->children(1)->items(2)->someYet()->... 
 
rootWindow.doModal();
я к тому, что в представленной цепочке
не понятным стороннему глазу остается исключительно 'a'

потому что нечитабельное имя.

а вот вся остальная цепочка - обратите внимание: используется вывод типов.
но все понятно:

некий виджет.
берем у него 1 ребенка.
у ребенка берет 2 предмет.
что то делаем с этим предметом....

при этом я понятия не имею, какова природа представленных типов.
но для понимания логики происходящего мне это и не нужно.

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Вероятно смотреть и сразу видеть ошибку, и видить ее после перекомпиляции не одно и тоже.
смотреть и сразу видеть - это такой тест на внимательность?

вместо того, что бы просто прочитать выхлоп компилятора на английском.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2015, 15:46  [ТС] 54
Цитата Сообщение от hoggy Посмотреть сообщение
некий виджет.
берем у него 1 ребенка.
у ребенка берет 2 предмет.
что то делаем с этим предметом....
Мы не знаем типы, мы с ним не знакомы, нам нужно перелапатить все по цепочки что бы узнать что там за тип и только тогда мы сможем узнать что у него есть мето doModal()

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
потому что нечитабельное имя.
Ну дело не в этом, там может быть к примеру имя dialog, а класс ModalDialog или AbstractDialog
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.08.2015, 15:46 55
Цитата Сообщение от Avazart Посмотреть сообщение
Мы не знаем типы, мы с ним не знакомы, нам нужно перелапатить все по цепочки что бы узнать что там за тип и только тогда мы сможем узнать что у него есть мето doModal()
зачем?

вот код:

C++
1
rootWindow.doModal();
вам не нужно знать, что это за тип, что бы знать,
что у него есть doModal.

он просто есть.
точно так же как есть вся эта цепочка.

потому что такова запись в исходном коде.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2015, 15:48  [ТС] 56
Цитата Сообщение от hoggy Посмотреть сообщение
зачем?
Ну как зачем? Мы ведь читаем код и допустим еще хотим что либо изменить в уже существующем коде который писали не мы.
К примеру задача сменить show() на showModal() ? Для этого нужно знать что там за класс.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.08.2015, 15:50 57
Цитата Сообщение от Avazart Посмотреть сообщение
Ну дело не в этом, там может быть к примеру имя dialog, а класс ModalDialog или AbstractDialog
нет, дело именно в этом.

читабельные имена позволяют нам понимать логику проиходящего.
а вовсе не их фактические типы.

если мы видим:

C++
1
2
auto dialogNewGame = ...
dialogNewGame .doModal();
то нам уже не принципиально, какой именно у него тип.
мы просто знаем - вот сейчас будет диалог с пользователем "новая игра".

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Ну как зачем? Мы ведь читаем код и допустим еще хотим что либо изменить в уже существующем коде который писали не мы.
в чужом коде вам в любом случае придется разбираться.
то есть сидеть, и вникать.
0
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 455
30.08.2015, 15:50 58
Цитата Сообщение от Avazart Посмотреть сообщение
Во первых главное слово почти, во вторых зачем дублировать то что у нас уже есть - шаблоны? В чем достижение то?
Может быт и красивее выглядит, но толку то?
Толку нет от Вашего спора. Вне зависимости от того, какого Вы мнения об auto в С++11, Вы ничего изменить не сможите.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.08.2015, 15:57  [ТС] 59
Цитата Сообщение от hoggy Посмотреть сообщение
в чужом коде вам в любом случае придется разбираться.
то есть сидеть, и вникать.
Ну вот вопрос затрат времени на это...
Разбирать всю цепочку или смотреть сразу код AbstaсtDialog.
Ну ли к примеру посмотреть итератор вектора и сравнивать его с итератором однонаправленного списка что бы понять что нельзя подставлять список в ф-цию из-за того что итератор неподдерживает декримент.

Добавлено через 3 минуты
Цитата Сообщение от ASCII Посмотреть сообщение
Толку нет от Вашего спора. Вне зависимости от того, какого Вы мнения об auto в С++11, Вы ничего изменить не сможите.
Но все же понять когда стоит использовать,а когда нет- можно.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.08.2015, 16:03 60
Цитата Сообщение от Avazart Посмотреть сообщение
Разбирать всю цепочку или смотреть сразу код AbstaсtDialog.
разбирать всю цепочку не понадобится.

смотрите:
C++
1
2
3
4
auto& item = *widget->children(1)->items(2);
 
// ошибка: в классе Item нет функции члена getName
std::cout<<"item = "<< item.getName()<<'\n';
идем сразу в класс Item, и смотрим, что там с ним.
рассматривать всю цепочку для этого не обязательно.

и это действие "смотреть Item" вы будете выполнять в любом случае,
так или иначе, если будет подобная ошибка.

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Ну ли к примеру посмотреть итератор вектора и сравнивать его с итератором однонаправленного списка что бы понять что нельзя подставлять список в ф-цию из-за того что итератор неподдерживает декримент.
зачем так сложно?

когда вы подсунете итератор списка, и выяснится, что он не поддерживает какой то функционал,
то вы сразу же об этом узнаете.

компилятор напишет вам это английским текстом.

диагностируются подобные ошибки точно так же, что с auto, что без него.
0
30.08.2015, 16:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2015, 16:03
Помогаю со студенческими работами здесь

Деградация программистов
Программистов теперь не интересует астрономия, история, компьютерные игры. На этом форуме за месяц...

Деградация системы и программ
Наверное, многие сталкивались с ситуацией, когда какая-то программа, если ей долго не пользоваться,...

Cannot re-assign auto-global variable _POST in или Warning: Invalid argument supplied for foreach() in
Здравствуйте, у меня такая проблемка, на php 5.3 всё работало, а вот когда перешел на php 5.6...

Нейронная сетка . Деградация весов с большим количеством итераций
Я тут экспериментировал с нейронной сеткой, наблюдал изменения выходных значений при решении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru