std::remove_reference erklären?

Sah ich mögliche Implementierungen für std::remove_reference wie unten

template< class T > struct remove_reference      {typedef T type;};
template< class T > struct remove_reference<T&>  {typedef T type;};
template< class T > struct remove_reference<T&&> {typedef T type;};   

Warum ist es, dass es Spezialisierungen für lvalue und rvalue reference? Nicht die Allgemeine Schablone selbst ausreichend sein, und den Verweis entfernen? Ich bin verwirrt, weil hier in der T& oder T&& Spezialisierung, wenn ich versuche, mit ::type sollte ich noch bekommen T& oder T&& bzw. rechts?

Könnten Sie erklären, wie, warum werfen wir zu remove_reference<t>::type&& im Zug? (ist es denn, dass der parameter benannt ist, so wird er behandelt, wie ein lvalue innerhalb der verschieben-Funktion?).

Außerdem konnten Sie zeigen einen Weg, wobei ich herausfinden kann und drucken, was das geben wird? für e.g, wenn seine rvalue Typ int dann sollte ich in der Lage zu drucken, die int&& übergeben wurde? (Ich habe mit std::is_same zu überprüfen, sondern manuell.)

Vielen Dank für Ihre Zeit.

  • Dies ist eine SEHR gute Frage!
Schreibe einen Kommentar