eferenzinitialisierung und direkte vs indirekte Bindu
Betrachten Sie den folgenden Fall
struct A {
operator int();
};
int &&x = A();
Die Spezifikation sagt beihttp: //eel.is/c++draft/dcl.init.ref# darüber, ob die Referenzbindung direkt oder indirekt ist
In allen Fällen mit Ausnahme des letzten (d. H. Erstellen und Initialisieren eines temporären Ausdrucks aus dem Initialisierungsausdruck) soll die Referenz direkt an den Initialisierungsausdruck gebunden sein.
Der obige Fall stimmt nicht mit der letzten, sondern mit der vorletzten Kugel überein.
Wenn T1 oder T2 ein Klassentyp ist und T1 nicht referenzbezogen zu T2 ist, werden benutzerdefinierte Konvertierungen berücksichtigt ... Das Ergebnis des Aufrufs der Konvertierungsfunktion, wie für die Nicht-Referenz-Kopierinitialisierung beschrieben, ist wird dann zum direkten Initialisieren der Referenz verwendet.
Daher die Bindung vonA()
zur Referenz istindirekte Bindung. Um fortzufahren, werden wir uns erneut mit der Referenzinitialisierung befassen, jetzt mit einem Wert vom Typint
, versucht, @ zu initialisierint&&
. Jetzt werden wir mit der letzten Kugel enden, was bedeutet,direct binding.
Also, was können wir über die Bindung der Referenz sagen ... bindet sie direkt oder indirekt? Funktioniert beides, je nachdem, welchen Ausdruck Sie betrachten (Initialisierungsausdruck vs. Ergebnis des Aufrufs der Konvertierungsfunktion)?
In unserem Fall scheinen insbesondere die Absätze @ zu sagWir binden direkt an den Initialisierungsausdruck und binden indirekt an das Ergebnis der Konvertierung für den Initialisierungsausdruck. Im Kapitel zur Überlastauflösunghttp: //eel.is/c++draft/over.ics.re, wir unterscheiden nur zwischen
Wenn ein Parameter des Referenztyps direkt an einen Argumentausdruck gebunden wird ([dcl.init.ref]),Wenn der Parameter direkt an das Ergebnis der Anwendung einer Konvertierungsfunktion auf den Argumentausdruck gebunden ist,Wenn ein Parameter des Referenztyps nicht direkt an einen Argumentausdruck gebunden ist,Für einen Fall wie
void f(int &&);
f(A());
Case 1 gilt, aber ich bin mir ziemlich sicher, dass es nicht beabsichtigt ist, sich zu bewerben. Mein Bauchgefühl ist, dass "In allen Fällen außer dem letzten" nicht nur dazu gedacht ist, den vorläufigen Fall zu erstellen, sondern auch den vorletzten Aufzählungspunkt oder alternativ den gesamten Zweig "Sonst:", der die beiden Aufzählungspunkte enthält (d. H das "letzte" bezieht sich auf eine andere Ebene in der Aufzählungszeichen-Hierarchie). Können Sie bitte klarstellen