in der C-Programmiersprache, rvalues (rechte Handwerte) können typischerweise nicht als LVALUES (linke Werte) verwendet werden. Es gibt jedoch Ausnahmen von dieser Regel, wie aus dem folgenden Code dargestellt:
class Y {
public:
explicit Y(size_t num = 0) {}
};
int main() {
Y(1) = Y(0); // WHAT?!?
return 0;
}
überraschenderweise kompiliert dieser Code erfolgreich, obwohl das vom Konstruktor y (1) zurückgegebene Objekt ein RValue ist. In diesem Artikel wird die Gründe für dieses unerwartete Verhalten untersucht.
Der Schlüssel zum Verständnis, warum dieser Code gültig ist, liegt im Konzept der synthetisierten Mitgliederfunktionen. Für Klassen, die einen Zuordnungsoperator nicht explizit definieren, generiert der Compiler einen Standard -Zuordnungsoperator. Dieser Standardoperator ist eine Mitgliedsfunktion, die einen Bezug auf ein Objekt derselben Klasse wie sein Parameter nimmt.
Im obigen Beispiel wird der Zuordnungsoperator für die Klasse y wie folgt synthetisiert:
Y& Y::operator=(const Y& other);
Constructor -Return -Werte
y (1) .operator = (y (0));
.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3