Mehrdeutige Überladung für operator = mit move assign und pass by value kopieren assign

8

Wenn ich einen Kopierzuweisungsoperator definiere, der den Kopierkonstruktor mit dem Übergabewert für die Klasse thing :

aufruft %Vor%

und ein Bewegungszuweisungsoperator für dieselbe Klasse:

%Vor%

Wenn Sie versuchen, die Zugzuweisung aufzurufen, wird ein Fehler von gcc:

angezeigt %Vor%

Wenn jedoch die Kopierzuweisung verwendet wird, wird "Verweis" verwendet:

%Vor%

Die Kompilierung ist in Ordnung, und beide Operatoren können aufgerufen werden. Warum ist das?

Schließen Sie den C ++ 11-Testcode ab:

%Vor%     
delicateLatticeworkFever 26.06.2014, 16:14
quelle

1 Antwort

3
  • Aufruf von move(b) gibt rvalue zurück.

  • Sowohl operator=(thing &&x) als auch operator=(thing x) können rvalues als Eingabe akzeptieren.

  • Als solche sind die zwei Überladungen mehrdeutig und der Compiler beklagt sich zu Recht, weil er nicht zwischen ihnen wählen kann.

101010 26.06.2014, 16:20
quelle

Tags und Links