Ho guardato un video sulle regole di deduzione tipo di auto e decltype spiegato da Scott Meyers ... Egli ha spiegato il seguenteQuali sono le regole di deduzione del tipo di decltype (valore retto expr)?
// decltype(lvalue expr) => reference to the type of the expression
// decltype(lvalue name) => type of the name
capisco queste regole ... ma lui non spiegare il seguente
// decltype(rvlaue expr) => ???
così ho cercato di capirlo, praticando così ho fatto la seguente
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
Ora la magia
decltype(std::move(x)) t4 = x; // Error t4 is int&& ... compiler says
non è std :: move (x) un'espressione di valore? perché decltype deducendo t4 in int & & non solo come gli esempi sopra? Quali sono le regole delle detrazioni di tipo decltype per le espressioni rvalue?
nota la firma del 'std :: move':.' Std :: :: remove_reference_t tipo && mossa (T &&); 'E restituire un riferimento rvalue, non per valore. –
Jarod42
Potrebbe aver appena consultato un riferimento. Prende circa dieci secondi a Google la documentazione. –