Verbessert es die Sicherheit, Zuweisungsoperatoren als Nur-Wert-Operatoren zu kennzeichnen?

WennT ist ein Klassentyp mit der Standardsignatur für den Zuweisungsoperator. Dann können wir schreiben:

T const &ref = ( T{} = something ); 

, das eine baumelnde Referenz erstellt. Mit der Signatur:

T &operator=(T t) &

Der obige Code mit Dangling-Referenz kann nicht kompiliert werden. Dies würde einige Situationen verhindern, in denen wir einen Wert zurückgeben, der ein temporäres Objekt kennzeichnet - unerwünschte Situationen, weil sie zu baumelnden Referenzen führen können.

Gibt es einen Grund, dies nicht zu tun? Würden wir gültige Anwendungsfälle für die Zuweisungsoperatoren deaktivieren?

Ich denke, die gleichen Kommentare können auch für die zusammengesetzten Zuweisungsoperatoren gelten,+= etc. Ein realistischerer Fall könnte sein:

std::string const &s = std::string("Hello, ") += "world!";

wobei der Tippfehler bis zur Laufzeit unbemerkt bleibt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage