Warum verhält sich T&& nicht wie eine R-Wert-Referenz?
Bei der Arbeit mit Funktionsüberladungen wie void f(T&&) und void f(T& ), ist es überraschend, dass f(T&) aufgerufen wird, wenn T&& übergeben wird, auch wenn das Gegenteil nicht der Fall ist. Dies ist auf das Verhalten von R-Wert-Referenzen in C zurückzuführen.
Entgegen der Intuition ist T&& nicht einfach eine R-Wert-Referenz. Es handelt sich um eine R-Wert-Referenz vom Typ Rvalue, was bedeutet, dass sie nur an R-Werte gebunden werden kann, sich ansonsten aber wie ein L-Wert vom R-Wert-Referenztyp verhält. Dieses Bindungsverhalten stellt sicher, dass Objekte ohne Namen und solche, die kurz davor stehen, ihren Namen zu verlieren, automatisch als R-Werte behandelt werden.
Da T&& jedoch einen Namen (d. h. t) hat, wird es als L-Wert betrachtet und ruft daher den f( T&) Überlastung. Die statische Umwandlung von t in T&&& unter Verwendung von f(static_cast
Zusammenfassend lauten die C-Regeln, die dieses Verhalten regeln:
Das obige ist der detaillierte Inhalt vonWarum verhält sich „T&&' nicht immer wie eine echte R-Wert-Referenz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!