2.9 KiB
title | localeTitle |
---|---|
The Auto Feature | O recurso automático |
O recurso automático
auto
é um recurso do C ++ 11 que permite ao compilador inferir o tipo de dados para você em uma definição. Isso pode economizar bastante digitação, especialmente com tipos complicados.
Sem auto
:
double x = 10.425;
double y = x * x;
Com auto
:
double x = 10.425;
auto y = x * x;
Embora pareça trivial, torna-se incrivelmente útil quando os tipos de dados começam a ficar complicados. Por exemplo, suponha que você queira armazenar um vector
de funcionários e esteja interessado apenas em seu nome e idade. Uma maneira de armazenar o nome e a idade pode ser um pair
com uma string
e um unsigned int
. Isso é declarado como std::vector<std::pair<std::string, unsigned int>> employees
. Agora, suponha que você queira acessar o último funcionário adicionado:
std::vector<std::pair<std::string, unsigned int>> employees;
// without auto, you have to write:
std::pair<std::string, unsigned int>> last_employee = employees.back();
// with auto, you just have to write:
auto last_employee = employees.back();
Uma vez que o compilador determina o tipo do lado direito do =
ele substitui o auto
por esse tipo.
Nas versões modernas de C ++ (desde C ++ 14), auto
também pode ser usado em uma declaração de função como o tipo de retorno. O compilador inferirá então o tipo de retorno da declaração de retorno dentro da função. Seguindo o exemplo com funcionários:
std::vector<std::pair<std::string, unsigned int>> employees;
auto get_last_employee() {
return employees.back(); // Compiler knows the return type from this line.
}
O compilador saberá da linha com a instrução de retorno que o tipo de retorno da função deve ser std::vector<std::pair<std::string, unsigned int>>
.
Embora bastante técnica, a página de autopresença descreve muitas outras utilizações de auto
e os detalhes de quando pode e não pode ser usado.
auto
antes do C ++ 11
Em alguns livros antigos contendo código muito antigo, a palavra auto
chave auto
é usada de maneira muito diferente.
Esse auto
particular era uma palavra-chave emprestada de C e provavelmente era a palavra-chave menos usada de todos os tempos.
Em C ++, todas as variáveis têm duração automática , ou seja, são definidas até você sair da função em que estão definidas.
Por exemplo:
`` `cpp
incluir
int main () { int a; a = 1; // faz sentido, como foi definido na mesma função
return 0;
} a = 2; // não faz sentido, já que não está definido aqui `` `
Este é um dado em C ++, e auto
especificou que a variável deve ter uma duração automática , daí a falta de uso.