Jest to kod z C++ 11 Uwagi próbki przez Scott Meyers,Co robi auto &&?
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&&
mam problemy ze zrozumieniem auto&&
.
mam pewne zrozumienie auto
, z której chciałbym powiedzieć, że auto& a1 = x
powinny typ a1
jak int&
Które z kodu cytowane wydaje się błędne.
Napisałem ten mały kod i uruchomiłem pod GCC.
#include <iostream>
using namespace std;
int main()
{
int x = 4;
auto& a1 = x; //line 8
cout << a1 << endl;
++a1;
cout << x;
return 0;
}
wyjściowy = 4 (newline) 5
Następnie zmodyfikowaną linię 8, jak auto&& a1 = x;
i ran. Ten sam wynik.
Moje pytanie: czy auto&
jest równe auto&&
?
Jeśli są inne, co robi auto&&
?
Myślę, że 'auto &' i 'auto &&' są równoważne, jeśli rhs jest lwartością. 'auto &' da ci błąd, jeśli rhs jest wartością r. – balki
[Odwołania do wartości L i odwołania do wartości r są podobne] (http://msdn.microsoft.com/en-us/library/f90831hc.aspx) – AJG85
Zmienna 'auto &&' oznacza to samo, co parametr 'T && 'w szablonie funkcji . – fredoverflow