Para variáveis, especifica que o tipo da variável que está sendo declarada será deduzido automaticamente de seu inicializador. Para funções, especifica que o tipo de retorno é um tipo de retorno à direita ou será deduzido de suas instruções de retorno (desde C ++ 14).
Sintaxe
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)
Explicação
1) Ao declarar variáveis no escopo do bloco, no escopo do namespace, nas instruções de inicialização dos loops for, etc., a palavra-chave auto pode ser usada como especificador de tipo. Depois que o tipo do inicializador é determinado, o compilador determina o tipo que substituirá a palavra-chave automaticamente usando as regras para dedução de argumento de modelo de uma chamada de função (consulte dedução de argumento de modelo # Outros contextos para obter detalhes). A palavra-chave auto pode ser acompanhada de modificadores, como const ou &, que participarão da dedução do tipo. Por exemplo, dado const auto& i = expr;
, o tipo de i é exatamente o tipo do argumento u em um modelo imagináriotemplate<class U> void f(const U& u)
se a função chamarf(expr)
foi compilado. Portanto, auto && pode ser deduzido como uma referência lvalue ou rvalue reference de acordo com o inicializador, que é usado no loop for baseado em intervalo. Se auto for usado para declarar várias variáveis, os tipos deduzidos deverão corresponder. Por exemplo, a declaração auto i = 0, d = 0.0;
está mal formada, enquanto a declaração auto i = 0, *p = &i;
está bem formada e o auto é deduzido como int.
2) Em uma declaração de função que usa a sintaxe do tipo de retorno à direita, a palavra-chave auto não executa a detecção automática de tipo. Ele serve apenas como parte da sintaxe.
3) Em uma declaração de função que não usa a sintaxe do tipo de retorno à direita, a palavra-chave auto indica que o tipo de retorno será deduzido do operando de sua instrução de retorno usando as regras para dedução de argumento do modelo.
4) Se o tipo declarado da variável for decltype (auto), a palavra-chave auto será substituída pela expressão (ou lista de expressões) de seu inicializador e o tipo real será deduzido usando as regras para decltype.
5) Se o tipo de retorno da função for declarado decltype (auto), a palavra-chave auto será substituída pelo operando de sua declaração de retorno e o tipo de retorno real será deduzido usando as regras para decltype.
6) Um especificador de nome aninhado do formulário auto :: é um espaço reservado que é substituído por um tipo de classe ou enumeração, seguindo as regras para dedução de espaço reservado do tipo restrito.
7) Uma declaração de parâmetro em uma expressão lambda. (desde C ++ 14) Uma declaração de parâmetro de função. (conceitos TS)
Notas
Até C ++ 11, auto tinha a semântica de um especificador de duração de armazenamento. Misturar variáveis e funções automáticas em uma declaração, como em, auto f() -> int, i = 0;
não é permitido.
Para mais informações: http://en.cppreference.com/w/cpp/language/auto