Ключевое слово `auto`
Что значит ключевое слово auto
в с++ и где оно применяется?
Что значит ключевое слово auto
в с++ и где оно применяется?
Это слово переопределено в новом стандарте и говорит компилятору: «Компилятор, возьми и угадай тип этой переменной!». Компилятор в многих случаях это может сам прекрасно сделать. Это удобно в шаблонах и для итераторов.
Когда-то раньше это слово значило совсем другое.
Ключевое слово auto означает, что переменная находится в automatic storage и время жизни такой переменной local lifetime. Другими словами, мы указывали, что данная переменная лежит в стеке, но так как все переменные созданные в функциях как
int a = 10;
уже и так подразумивается, что они стековые - то это ключевое слово безсмысленное.
Начиная с С++11 ключевое слово auto обретает новую жизнь. Оно говорит, что компилятор на этапе компиляции должен определить тип переменной на основе типа инициализируемого выражения.
#include <iostream>
#include <typeinfo>
#include <vector>
using namespace std;
class Foo
{
public:
Foo( int x )
{
}
};
int main()
{
std::vector<std::vector<Foo*>> arr;
auto a = 166LL;
auto b = 'a' + true;
auto c = Foo(3);
auto d = arr.begin();
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
cout << typeid(d).name() << endl;
return 0;
}
Output: http://rextester.com/BNNAL62867
Cторонники: есть типы данных в С++, которые портят читаемость когда своей длинной (про итераторы std::vector, к примеру) и хотелось бы писать меньше. Для modern C++ в условиях метапрограммирования возможность возврата типа auto делает шаблон гибким.
Противники: тип auto бьет по читабельности кода. Приходится гадать, что за переменная и делать лишнее действие в IDE наводя мышкой, чтобы понять что за тип. Такого рода "динамический тип" встает в разрез определению, что С++ строготипизированный язык.
Я же за использование auto в меру. Не надо впадаться в крайности.