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

Antworten auf die Frage(0)

Ihre Antwort auf die Frage