В чем смысл использования auto?

149
07 октября 2018, 12:40

В сети нашел статьи, например такиую: статья.

Мне не понятен смысл auto, зачем его придумали?

Самая большая польза от него - это отсутствие необходимости прописывать длинные типы переменных?

Говорят, что удобно автоматически определять тип переменной. В чем удобство? Это же совсем не удобно, когда ты не знаешь что приравнивается к auto-переменной, без просмотра листинга кода и поиска того что присваивается? Указывая тип переменной явно, более наглядно видно что переменной такого-то типа присвоено то-то. В итоге нужно еще внимательней контролировать операцию присваивания.

Answer 1

Ну, наверное, действительно куда удобнее

for(std::vector<std::vector<std::pair<std::string,std::vector<std::pair<int,unsigned long>>>>>::iterator it = c.begin(); it != c.end(); ++it)

чем

for(auto it = c.begin(); it != c.end(); ++it)

Но вы забыли еще целый ряд применений auto - например, в шаблонных лямбда-выражениях... Да или даже простых - попробуйте напишите без auto что-то типа

auto sq = [](auto x){ return x*x; };
cout << sq(5) << endl;
cout << sq(5.5) << endl;

В шаблонах это очень упрощает жизнь, кстати. Просто это такой себе простенький вывод типа. Или вы возмущены и выводом типов, и считаете, что нужно писать не, скажем,

max(5,10)

а именно

max<int>(5,10)

(более длинные шаблонные функции с выводом типа аргументов не стал приводить)?

Не стараюсь переубедить, просто привожу свое мнение - почему я люблю auto. А вам только скажу - насильно мил не будешь :), так что можете вполне просто обходиться без auto - язык вообще не так уж много заставляет использовать, особенно нового - в силу обратной совместимости...

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

READ ALSO
C++, избавление объекта от квалификатора const

C++, избавление объекта от квалификатора const

Хорошим тоном в C/C++ считается использование const везде, где можно

165
Значения с С++ в QML

Значения с С++ в QML

С СОМ порта мне приходят данные, например: 19999932

144
Ошибка при инжекте DLL-файла

Ошибка при инжекте DLL-файла

Возникла ошибка, при инжекте собственного DLL-файла в игру

257
Как получить Bitmap из Gif?

Как получить Bitmap из Gif?

Простым открытием файла не получаетсяПримерный код:

183