Para variables, especifica que el tipo de la variable que se está declarando se deducirá automáticamente de su inicializador. Para funciones, especifica que el tipo de devolución es un tipo de devolución final o se deducirá de sus declaraciones de devolución (ya que C++ 14).
Sintaxis
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)
Explicación
1) Cuando la declaración de variables en ámbito de bloque, en el perímetro de espacio de nombres, en los estados de inicialización de los bucles, etc., el automóvil se puede utilizar la palabra clave como el especificador de tipo. Una vez que se ha determinado el tipo de inicializador, el compilador determina el tipo que reemplazará la palabra clave auto utilizando las reglas para la deducción de argumento de plantilla desde una llamada a función (ver deducción del argumento de plantilla # Otros contextos para más detalles). La palabra clave auto puede ir acompañada de modificadores, como const o &, que participarán en la deducción del tipo. Por ejemplo, dado const auto& i = expr;
, el tipo de i es exactamente el tipo del argumento u en una plantilla imaginaria template<class U> void f(const U& u)
si se compiló la llamada a la función f(expr)
. Por lo tanto, auto & & se puede deducir como una referencia lvalue o una referencia rvalue según el inicializador, que se utiliza en el bucle for-based. Si se usa auto para declarar múltiples variables, los tipos deducidos deben coincidir. Por ejemplo, la declaración auto i = 0, d = 0.0;
está mal formada, mientras que la declaración auto i = 0, *p = &i;
está bien formada y el auto se deduce como int.
2) En una declaración de función que utiliza la sintaxis del tipo de retorno final, la palabra clave auto no realiza la detección automática de tipo. Solo sirve como parte de la sintaxis.
3) En una declaración de función que no utiliza la sintaxis de tipo de retorno final, la palabra clave auto indica que el tipo de retorno se deducirá del operando de su declaración de devolución utilizando las reglas para la deducción de argumentos de plantilla.
4) Si el tipo declarado de la variable es decltype (auto), la palabra clave auto se reemplaza con la expresión (o lista de expresiones) de su inicializador, y el tipo real se deduce usando las reglas para decltype.
5) Si el tipo de devolución de la función se declara decltype (auto), la palabra clave auto se reemplaza con el operando de su declaración de devolución, y el tipo de devolución real se deduce usando las reglas para decltype.
6) Un especificador de nombre anidado de la forma auto :: es un marcador de posición que se reemplaza por una clase o tipo de enumeración siguiendo las reglas para la deducción de marcador de posición de tipo restringido.
7) Una declaración de parámetro en una expresión lambda. (desde C++ 14) Una declaración de parámetro de función. (conceptos TS)
Notas Hasta C++ 11, auto tuvieron la semántica de un especificador de duración del almacenamiento. No está permitido mezclar variables automáticas y funciones en una declaración, como en auto f() -> int, i = 0;
.
Para más información: http://en.cppreference.com/w/cpp/language/auto
no lo es. magia. Es nuevo (_oh noes, que mal pun_). Ahora async es el futuro (_gasp_) – sehe
Aquí está la referencia sobre palabras clave automáticas http: //en.cppreference.com/w/cpp/language/auto – andyqee