Для змінних вказує, що тип змінної, яка оголошується, буде автоматично виведений з її ініціалізатора. Для функцій вказує, що тип повернення є заднім типом повернення або буде виведено з його операторів повернення (оскільки 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) При оголошенні змінних в області блоку, в області простору імен, в операторах ініціалізації циклів тощо, ключове слово auto може використовуватися як специфікатор типу. Після того, як визначено тип ініціалізатора, компілятор визначає тип, який замінить ключове слово auto, використовуючи правила для виведення аргументу шаблону з виклику функції (детальну інформацію див. У виведенні аргументу шаблону # Інші контексти). Ключове слово auto може супроводжуватися модифікаторами, такими як const або &, які братимуть участь у виведенні типу. Наприклад, заданий const auto& i = expr;
, тип i - це саме тип аргументу u в уявному шаблоні, template<class U> void f(const U& u)
якщо функція викликаєf(expr)
були складені. Таким чином, автоматичне && може бути виведене як посилання на значення значення або посилання на оцінку відповідно до ініціалізатора, який використовується в діапазоні для циклу. Якщо для декларування декількох змінних використовується авто, то виведені типи повинні відповідати. Наприклад,auto i = 0, d = 0.0;
неправильно сформована, тоді як декларація auto i = 0, *p = &i;
добре сформована, а автоматичне виводиться як int.
2) У оголошенні функції, яке використовує синтаксис типу зворотного повернення, ключове слово auto не виконує автоматичне визначення типу. Він виступає лише частиною синтаксису.
3) У оголошенні функції, що не використовує синтаксис типу зворотного повернення, ключове слово auto вказує, що тип повернення буде виведений з операнду його оператора повернення, використовуючи правила для виведення аргументу шаблону.
4) Якщо оголошеним типом змінної є decltype (auto), ключове слово auto замінюється виразом (або списком виразів) його ініціалізатора, а фактичний тип виводиться за допомогою правил decltype.
5) Якщо тип повернення функції оголошено decltype (auto), ключове слово auto замінюється операндом його оператора return, а фактичний тип повернення виводиться за допомогою правил для decltype.
6) Специфікатор вкладеного імені форми auto :: - це заповнювач, який замінюється класом або типом переліку, дотримуючись правил для вирахування заповнення типу обмеженого типу.
7) Декларація параметра в виразі лямбда. (оскільки C ++ 14) Декларація параметра функції. (поняття ТС)
Примітки
До моменту C ++ 11, auto мав семантичний специфікатор тривалості зберігання. Змішування автоматичних змінних та функцій в одній декларації, як уauto f() -> int, i = 0;
, заборонено.
Для отримання додаткової інформації: http://en.cppreference.com/w/cpp/language/auto