Sto leggendo di inoltro perfetta, e questo è qualcosa che ho imparato che mi ha confuso:
Quando si sta cercando di ottenere l'inoltro perfetto, ti fare qualcosa di simile:Quando si perfeziona, il nome di tipo T diventa un T & o T &&, ma quando non lo si fa, T non è affatto un riferimento. Come?
template<class T> // If I were to call foo with an l-value int, foo would look
void foo(T &&x); // like this: void foo(int& &&x)
Così poi ho pensato, aspetta, vuol dire che se l'ho fatto:
template<class T> // If I were to call foo with an l-value int, foo would look
void foo(T x); // like this: void foo(int& x);
Ma non è quello che succede. foo appare invece in questo modo: void foo(int x);
La mia domanda: Come mai in funzione di inoltro perfetta, T si trasforma in un T o T & & &, ma nell'altro, T non è un punto di riferimento? Qualcuno può dirmi le regole esatte per questo? Ho bisogno di qualche chiarimento!
Quando 'T &&' può diventare un valore l o un riferimento di valore r è ciò che Scott Meyers definisce" _Rapporto universale_ ". (Ritengo che questa terminologia stia ottenendo una maggiore adozione tra gli esperti.) Suggerisco di dare un'occhiata a [questo] (http://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012 -Scott-Meyers-Universal-References-in-Cpp11) presenta e legge il suo articolo in [Overload 111] (http://accu.org/var/uploads/journals/Overload111.pdf). –