Konstruktorsignatur verschieben

8

Von dieser Referenz, erlaubt es einen const rvalue als Bewegungskonstruktor

%Vor%

Wie kann ein bewegliches Objekt const sein? Selbst wenn dies technisch möglich wäre, gibt es einen Fall, in dem eine solche Erklärung nützlich wäre?

    
balki 28.12.2012, 09:44
quelle

2 Antworten

9
  

Wie kann ein bewegliches Objekt const ?

sein?

Das geht nicht, aber das sagt die Sprache nicht. Die Sprache besagt, dass ein Konstruktor mit dieser Signatur ein "move constructor" ist, aber das bedeutet nicht, dass das Argument verschoben wird, sondern dass der Konstruktor die Anforderungen eines "move constructor" erfüllt. Ein Verschiebungskonstruktor muss nichts verschieben, und wenn das Argument const ist, kann es nicht.

  

Gibt es einen Fall, in dem eine solche Erklärung sinnvoll wäre?

Ja, aber nicht sehr oft. Dies kann nützlich sein, wenn Sie verhindern möchten, dass ein anderer Konstruktor durch Überladungsauflösung ausgewählt wird, wenn ein const temporary als Argument übergeben wird.

%Vor%

In diesem Code stimmt das von func() zurückgegebene temporäre Objekt nicht exakt mit den Parametern der Kopier- oder Verschiebungskonstruktoren überein. Daher wird der Template-Konstruktor aufgerufen, der einen beliebigen Typ akzeptiert. Um dies zu verhindern, können Sie eine andere Überladung mit einem konstanten Wert angeben und entweder an den Kopierkonstruktor delegieren:

%Vor%

Oder wenn Sie die Code-Kompilierung verhindern möchten, definieren Sie sie als gelöscht:

%Vor%

Siehe Ссылка für Beispiele aus dem Standard, die eine Konstante rvalue verwenden.

    
Jonathan Wakely 28.12.2012, 15:06
quelle
0

Einige Hintergrundinformationen zu dieser Funktion.

Rvalue Referenzen - Aus Bjarne Stroustrups Blog

Vorschlag zum Hinzufügen der Move-Semantik-Unterstützung zur C ++ - Sprache

Eine interessante Frage. Ich habe irgendwo eine Erklärung dieser Frage von Stroustrup gelesen, kann sie aber nicht finden. Ich hoffe, das obige hilft an seiner Stelle.

    
RocketRoy 29.12.2012 01:22
quelle

Tags und Links