Для переменных указывает, что тип объявляемой переменной будет автоматически выводиться из ее инициализатора. Для функций указывает, что тип возврата является завершающим типом возврата или будет выводиться из его операторов возврата (начиная с C ++ 14).
Синтаксис
auto variable initializer (1) (since C++11)
auto function -> return type (2) (since C++11)
auto function (3) (since C++14)
decltype(auto) variable initializer (4) (since C++14)
decltype(auto) function (5) (since C++14)
auto :: (6) (concepts TS)
cv(optional) auto ref(optional) parameter (7) (since C++14)
Объяснение
1) При объявлении переменных в области видимости блока, в области пространства имен, в операторах инициализации циклов for и т. Д. Ключевое слово auto может использоваться в качестве спецификатора типа. Как только тип инициализатора определен, компилятор определяет тип, который заменит ключевое слово auto, используя правила для вывода аргументов шаблона из вызова функции (подробности см. В разделе Вывод аргументов шаблона # Другие контексты). Ключевое слово auto может сопровождаться модификаторами, такими как const или &, которые будут участвовать в выводе типа. Например, данный const auto& i = expr;
тип i в точности соответствует типу аргумента u в воображаемом шаблоне, template<class U> void f(const U& u)
если вызов функцииf(expr)
был составлен. Следовательно, auto && может выводиться либо как ссылка lvalue, либо как ссылка rvalue в соответствии с инициализатором, который используется в цикле for на основе диапазона. Если auto используется для объявления нескольких переменных, выведенные типы должны совпадать. Например, объявление auto i = 0, d = 0.0;
сформировано неправильно, в то время как объявление auto i = 0, *p = &i;
сформировано правильно, а auto выводится как int.
2) В объявлении функции, использующей синтаксис конечного возвращаемого типа, ключевое слово auto не выполняет автоматическое определение типа. Он служит только частью синтаксиса.
3) В объявлении функции, которое не использует синтаксис конечного возвращаемого типа, ключевое слово auto указывает, что тип возвращаемого значения будет выводиться из операнда его оператора возврата с использованием правил для вывода аргументов шаблона.
4) Если объявленный тип переменной - decltype (auto), ключевое слово auto заменяется выражением (или списком выражений) ее инициализатора, и фактический тип выводится с использованием правил для decltype.
5) Если тип возвращаемого значения функции объявлен decltype (auto), ключевое слово auto заменяется операндом его оператора возврата, и фактический тип возвращаемого значения выводится с использованием правил для decltype.
6) Указатель вложенного имени в форме auto :: является заполнителем, который заменяется классом или типом перечисления в соответствии с правилами вывода заполнителя ограниченного типа.
7) Объявление параметра в лямбда-выражении. (начиная с C ++ 14) Объявление параметра функции. (концепции ТС)
Примечания.
До C ++ 11 у auto была семантика спецификатора продолжительности хранения. Смешивание автоматических переменных и функций в одном объявлении auto f() -> int, i = 0;
не допускается.
Для получения дополнительной информации: http://en.cppreference.com/w/cpp/language/auto