top surveys stackoverflow programming popular most languages development c++ c++11 auto

c++ - programming - stackoverflow surveys



¿Qué significa auto && do? (1)

El código es correcto auto&& p = expr significa que el tipo de p es T&& donde T se deducirá de expr . El && aquí indica una referencia rvalue, por ejemplo

auto&& p = 1;

inferirá T == int y, por lo tanto, el tipo de p es int&& .

Sin embargo, las referencias pueden colapsarse de acuerdo con la regla:

T& & == T& T& && == T& T&& & == T& T&& && == T&&

(Esta característica se usa para implementar el reenvío perfecto en C ++ 11).

En el caso

auto&& p = x;

como x es un lvalor, no se puede vincular una referencia rvalue, pero si inferimos T = int& luego el tipo de p se convertirá en int& && = int& , que es una referencia lvalue, que puede vincularse a x . Solo en este caso auto&& y auto& dan el mismo resultado. Sin embargo, estos dos son diferentes, por ejemplo

auto& p = std::move(x);

es incorrecto porque std::move(x) es un valor r, y la referencia lvalue no puede vincularse a él.

Por favor, lea las referencias de C ++ Rvalue explicadas para un recorrido.

Este es el código de C ++ 11 Notes Sample de Scott Meyers,

int x; auto&& a1 = x; // x is lvalue, so type of a1 is int& auto&& a2 = std::move(x); // std::move(x) is rvalue, so type of a2 is int&&

Tengo problemas para entender el auto&&
Tengo un poco de comprensión de auto , de lo cual yo diría que auto& a1 = x debería hacer el tipo de a1 como int&

Que a partir del código entre comillas parece incorrecto.

Escribí este pequeño código y corrí bajo gcc.

#include <iostream> using namespace std; int main() { int x = 4; auto& a1 = x; //line 8 cout << a1 << endl; ++a1; cout << x; return 0; }

Salida = 4 (newline) 5
Luego modifiqué la línea 8 como auto&& a1 = x; , y corrió. Mismo resultado.

Mi pregunta: ¿es auto& igual que auto&& ?
Si son diferentes, ¿qué hace auto&& do?