Wenn Sie den Zuordnungsbetreiber so definieren, dass Sie einen Wert annehmen, sollten Sie den Zuordnungsbetreiber nicht definieren (nicht und nicht), wenn Sie eine RValue-Referenz einnehmen. Es macht keinen Sinn.
Im Allgemeinen müssen Sie nur eine Überlastung anbieten, wenn Sie eine RValue-Referenz nutzen, wenn Sie einen LVALUE von einem RValue unterscheiden müssen. In diesem Fall bedeutet Ihre Implementierungswahl jedoch, dass Sie diese Unterscheidung nicht treffen müssen. Egal, ob Sie einen LVALUE oder ein RValue haben, Sie werden das Argument erstellen und den Inhalt austauschen.
String f();
String a;
a = f(); // with String& operator=(String)
In diesem Fall wird der Compiler den Anruf auflösen, um zu sein a.operator=(f());
Es wird erkennen, dass der einzige Grund für den Rückgabewert das Argument ist operator=
und wird jede Kopie elide -dies ist der Sinn, die Funktion überhaupt einen Wert zu machen!