2016-06-08 8 views

Antwort

28

Dies ist aufgrund reference collapsing rules.

Grundsätzlich obwohl Sie keinen Verweis auf ein Referenz sich in einigen Fällen schreiben kann (typedefs, Template-Parameter, decltypes) Sie hinzufügen können einen Verweis auf einen Referenztyp erstellen, die sich wie folgt zusammenbricht:

A& & -> A& 
A& && -> A& 
A&& & -> A& 
A&& && -> A&& 

In Ihrem Fall ist int_refint&&, also int&& && wird int&&.


Der entsprechende Standard Zitat:

(N3337) [dcl.ref]/6: Wenn ein typedef (7.1.3), eine Art Template-Parameter (14.3.1) oder ein decltype-specifier (7.1 .6.2) bezeichnet einen Typ TR die einen Verweis auf einem Typ ist T, ein Versuch, den Typ „lvalue Bezug auf cvTR“ den Typ „L-Wert erzeugt zu erstellen Referenz auf T ", während ein Versuch, den Typ" rvalue Verweis auf cvTR erstellen "erstellt den Typ TR.

+0

Ah, cool! Haben Sie zufällig einen Hinweis auf die C++ - Spezifikation, wo dies erwähnt wird? – tobspr

+2

@tobspr Sicher, hinzugefügt – TartanLlama

+1

@tobspr Wenn Sie jemals jemanden über "universelle Referenzen" oder "Forwarding Referenzen" sprechen gehört, ist dies die vereinfachte Erklärung der Referenzzusammenbruch, dass viele Menschen intuitiver und nützlich in der Praxis finden. Sie haben einen der wenigen Fälle gefunden, in denen es nicht funktioniert. – Ixrec

Verwandte Themen