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?