Wie kommt es, dass eine Nicht-Konstanten-Referenz nicht an ein temporäres Objekt gebunden werden kann?

Warum ist es nicht erlaubt, einen nicht konstanten Verweis auf ein temporäres Objekt zu erhalten, das funktioniert?getx() kehrt zurück? Natürlich ist dies durch C ++ Standard verboten, aber ich bin an dem Zweck einer solchen Einschränkung interessiert.keine Referenz zum Standard.

struct X
{
    X& ref() { return *this; }
};

X getx() { return X();}

void g(X & x) {}    

int f()
{
    const X& x = getx(); // OK
    X& x = getx(); // error
    X& x = getx().ref(); // OK
    g(getx()); //error
    g(getx().ref()); //OK
    return 0;
}
Es ist klar, dass die Lebensdauer des Objekts nicht die Ursache sein kann, weil ständiger Bezug zu einem Objekt bestehtnicht verboten von C ++ Standard.Es ist klar, dass das temporäre Objekt im obigen Beispiel nicht konstant ist, da Aufrufe von nicht konstanten Funktionen zulässig sind. Zum Beispiel,ref() könnte das temporäre Objekt ändern.In Ergänzung,ref() ermöglicht es Ihnen, den Compiler zum Narren zu halten und einen Link zu diesem temporären Objekt zu erhalten, und das löst unser Problem.

In Ergänzung:

Sie sagen, dass "das Zuweisen eines temporären Objekts zu der const-Referenz die Lebensdauer dieses Objekts verlängert" und "obwohl nichts über nicht const-Referenzen gesagt wird". Meinezusätzliche Frage. Verlängert die folgende Zuordnung die Lebensdauer des temporären Objekts?

X& x = getx().ref(); // OK

Antworten auf die Frage(11)

Ihre Antwort auf die Frage