Ich habe ein Video über Art Abzugsregeln von Auto beobachtet und decltype von Scott Meyers ... Er erklärte die folgendenWas sind die Regeln für den Typabzug von decltype (rvalue expr)?
// decltype(lvalue expr) => reference to the type of the expression
// decltype(lvalue name) => type of the name
Ich verstehe diese Regeln erklärt ... aber er knapp über die folgenden
// decltype(rvlaue expr) => ???
erklären so
ich habe versucht, es zu verstehen, durch Üben, so habe ich die folgenden
int x = 8;
int func(); // calling this function is rvlaue expr ...
decltype(32) t1 = 128; // Ok t1 is int
decltype(64) t2 = x; // Ok t2 is int
decltype(func()) t3 = x; // Ok t3 is int ... obviously
nun die Magie
decltype(std::move(x)) t4 = x; // Error t4 is int&& ... compiler says
ist nicht std :: move (x) ein rvalue Ausdruck? warum declltype deducing t4 zu int & & nicht nur int wie die obigen Beispiele? Was sind die Regeln von Deklinationsabdrücken für rvalue-Ausdrücke?
Hinweis die Unterschrift von 'std :: move'.' Std :: remove_reference_t :: type && move (T &&); 'Es zurückgeben rvalue Referenz, nicht von Wert. –
Jarod42
Hätte nur eine Referenz konsultiert, dauert etwa zehn Sekunden, um die Dokumentation zu googeln. –