Heim > Backend-Entwicklung > C++ > Hauptteil

Zuweisung zu R-Werten: Verboten oder Feature? Warum können wir einen Rückgabewert zuweisen?

Patricia Arquette
Freigeben: 2024-10-31 09:19:30
Original
437 Leute haben es durchsucht

 Assignment to Rvalues: Forbidden or Feature? Why Can We Assign to a Return Value?

Zuweisung an R-Wert: Warum und wie?

Warum ist eine Zuweisung an einen Rückgabewert (R-Wert) eines Klassentyps möglich? Herkömmlicherweise gelten R-Werte als kurzlebig, da ihnen eine Speicheradresse fehlt. Wie können sie dann als linke Werte (L-Werte) verwendet werden?

Bedenken Sie den folgenden rätselhaften Code:

class Y {
public :
    explicit Y(size_t num = 0) {}
};

int main() {
    Y(1) = Y(0); // WHAT?!?
    return 0;
}
Nach dem Login kopieren

Dieser Code lässt sich fehlerfrei kompilieren, auch wenn er unlogisch erscheinen könnte. Um zu verstehen, warum, müssen wir uns mit der Mechanik hinter Zuweisungsoperatoren befassen.

Synthetisierte Zuweisungsoperatoren

Wenn eine Klasse einen Zuweisungsoperator nicht explizit definiert, definiert der Compiler dies automatisch erzeugt einen. Der synthetisierte Operator kann eine von zwei Formen annehmen:

  • Y& Operator=(Y const&)
  • Y& Operator=(Y&)()

The Letztere Form ist bemerkenswert, weil sie auf R-Werte anwendbar ist. Daher generiert der Compiler im obigen Beispiel einen Zuweisungsoperator, der den vom Konstruktor Y(1) zurückgegebenen R-Wert akzeptieren kann.

Zuweisung an R-Werte verhindern

If Wenn Sie die Zuweisung an R-Werte verbieten möchten, können Sie den Zuweisungsoperator explizit mit Ref-Qualifizierern deklarieren. Auf diese Weise können Sie den Operator darauf beschränken, nur L-Werte zu akzeptieren. Zum Beispiel:

class Y {
public :
    explicit Y(std::size_t num = 0);
    Y& operator=(Y const&) & = default;
};
Nach dem Login kopieren

Durch die Verwendung des Ref-Qualifizierers & stellen Sie sicher, dass der synthetisierte Zuweisungsoperator nur für L-Werte verfügbar ist.

Das obige ist der detaillierte Inhalt vonZuweisung zu R-Werten: Verboten oder Feature? Warum können wir einen Rückgabewert zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage