Perguntas com a marcação «auto»

A palavra-chave `auto` foi reaproveitada em C ++ 11 para um tipo deduzido. Quando usado para substituir um nome de tipo em uma declaração de variável inicializada, a variável recebe o mesmo tipo do inicializador. Quando usado como um tipo de retorno, o tipo de retorno é especificado como um tipo de retorno final ou deduzido da expressão de retorno.

168
O que o auto && nos diz?

Se você ler código como auto&& var = foo(); onde fooé qualquer função que retorna pelo valor do tipo T. Então varé um lvalue do tipo rvalue de referência T. Mas o que isso implica var? Isso significa que estamos autorizados a roubar os recursos var? Existem situações razoáveis ​​em que...

144
Palavra-chave automática C ++. Por que isso é mágico?

De todo o material que aprendi em C ++, autosempre foi um especificador de duração de armazenamento estranho que não tinha nenhum objetivo. Mas, recentemente, encontrei um código que o usava como um nome de tipo por si só. Por curiosidade, eu tentei, e assume o tipo do que quer que eu atribua a...

128
operador de seta (->) no cabeçalho da função

Me deparei com o seguinte código: template <typename T, typename T1> auto compose(T a, T1 b) -> decltype(a + b) { return a+b; } Há uma coisa que não consigo entender: Onde eu poderia descobrir o que o operador de seta ( ->) significa no cabeçalho da função? Eu acho que, logicamente, o...

125
Por que auto a = 1; compilar em C?

O código: int main(void) { auto a=1; return 0; } é compilado sem erros pelo compilador do MS Visual Studio 2012, quando o arquivo tem a extensão .c. Eu sempre pensei que, quando você usa a extensão .c, a compilação deve estar de acordo com a sintaxe C e não com o C ++. Além disso, até onde eu...

124
Lambda retornando: isso é legal?

Considere este programa bastante inútil: #include <iostream> int main(int argc, char* argv[]) { int a = 5; auto it = [&](auto self) { return [&](auto b) { std::cout << (a + b) << std::endl; return self(self); }; }; it(it)(4)(6)(42)(77)(999); } Basicamente,...

114
Como o lambda genérico funciona em C ++ 14?

Como o lambda genérico funciona ( autopalavra-chave como tipo de argumento) no padrão C ++ 14? É baseado em modelos C ++ onde, para cada tipo de argumento diferente, o compilador gera uma nova função com o mesmo corpo, mas com tipos substituídos (polimorfismo em tempo de compilação) ou é mais...

113
Existe inferência automática de tipo em Java?

Existe um autotipo de variável em Java como você tem em C ++? Um exemplo: for ( auto var : object_array) std::cout << var << std::endl; for( auto var : object_array) var.do_something_that_only_this_particular_obj_can_do(); Eu sei que existe um loop for aprimorado em Java, mas...

88
C ++ auto e vs auto

Ao criar variáveis ​​locais, é correto usar (const) auto&ou auto? por exemplo: SomeClass object; const auto result = object.SomeMethod(); ou const auto& result = object.SomeMethod(); Onde SomeMethod () retorna um valor não primitivo - talvez outro tipo definido pelo usuário. Meu...

16
std :: pair <auto, auto> tipo de retorno

Eu estava brincando com autono std::pair. No código abaixo, a função fdeve retornar um std::pairdos tipos que dependem de um parâmetro de modelo. Um exemplo de trabalho: EXEMPLO 1 template <unsigned S> auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if...