Ключевое слово auto
Ключевое слово auto заставляет компилятор
самостоятельно определить тип переменной на основе
выражения, которым она инициализируется. При этом
тип выводится один раз на этапе компиляции, а сама
переменная остаётся строго типизированной - изменить
её тип в дальнейшем нельзя. Обязательным условием
использования auto является наличие
инициализатора: без него компилятор не сможет
вывести тип.
Особенно удобно auto при работе с
длинными именами типов, итераторами контейнеров
и лямбда-выражениями, тип которых порой невозможно
записать вручную.
Синтаксис
auto name = value;
auto name{value};
auto name = expression;
Пример
Давайте выведем тип переменной x с помощью
оператора typeid и сравним его с типом
int:
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
auto x = 5;
cout << (typeid(x) == typeid(int)) << endl;
return 0;
}
Результат выполнения кода:
1
Пример
Ключевое слово auto удобно применять для
перебора элементов контейнера, не записывая
длинное имя типа итератора:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
При использовании auto совместно с
const и ссылками важно помнить, что
auto по умолчанию отбрасывает ссылку и
квалификатор const. Давайте сравним
два случая:
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
const int a = 5;
auto b = a;
auto& c = a;
cout << (typeid(b) == typeid(int)) << endl;
cout << (typeid(c) == typeid(const int)) << endl;
return 0;
}
Результат выполнения кода:
1
1