Gibt den Wert const aus der arithmetischen Operatorüberladung mit der Zuweisungszuweisung zurück

8

Nehmen wir an, ich habe die folgende minimale Beispielklasse:

%Vor%

Dies gibt move wie erwartet aus. Nach Effektiv C ++, Punkt 3, sollte ich const Foo von operator+ zurückgeben, um das Konstrukt wie a + b = c zu vermeiden, d.h.:

%Vor%

Leider beginnt dies plötzlich Kopierzuweisung anstelle von Zuweisungsoperator aufzurufen. [Ich benutze gcc 4.8.4 unter Ubuntu, aber es ist wahrscheinlich nichts mit dem Compiler zu tun]

Wie kann ich sicherstellen, dass a + b = c nicht kompiliert werden kann und gleichzeitig die Verschiebung für a = b + c aufgerufen wird? Oder gibt es mit der Einführung der Bewegungssemantik keine Möglichkeit, beides gleichzeitig zu erreichen?

    
taskinoor 23.02.2018, 15:48
quelle

1 Antwort

2

Ich habe am Ende lvalue Referenz Qualifier wie von Caninonos im Kommentar und von max66 in jetzt gelöschte Antwort (aber 10k Benutzer können es sehen).

%Vor%

Es ist einfach zu implementieren und es bietet ein besseres Interface-Design, da die Zuordnung zu etwas anderem, dass Lvalue nicht sinnvoll klingt und eine mögliche Fehlerquelle ist.

Es sollte jedoch beachtet werden, dass die Möglichkeit, a + b = c versehentlich zu schreiben, sehr gering ist. Auch vom Compiler erzeugte Zuweisungsoperatoren sind nicht lvalreferenzqualifiziert, und wir können a + b = c mit Standardtypen schreiben, z. mit std::string oder mit std::complex .

    
taskinoor 03.03.2018, 14:00
quelle

Tags und Links