Zurückgeben eines Klassenmembervektors in C ++ 11

9

Ich habe ein paar Posts darüber gelesen, wie man einen Vektor aus einer Methode zurückgibt:

  1. c11 rvalues ​​und move semantics confusion return statement

  2. Geschwindigkeit soll nach Wert weitergegeben werden

  3. Warum führt Visual Studio keine Optimierung der Rückgabewerte durch

  4. Wiki - Rückgabewertoptimierung

und ich bin immer noch verwirrt darüber, wie man einen Vektor in VS2013 richtig weitergibt und was die Unterschiede zwischen den folgenden Methoden in diesem Code sind (die Fragen sind in den Kommentaren markiert):

%Vor%

Ich bin mir also nicht sicher, ob // 1 eine explizite Form von // 2 ist, nicht sicher, ob 3 funktioniert. Was sind die Unterschiede zwischen 4 und 5? Wie kann man es testen, wenn RVO für Vektoren in VS2013 funktioniert?

    
CrSe 27.02.2015, 08:25
quelle

1 Antwort

8
%Vor%

Das ist einfach hässlich, du brauchst immer noch eine Kopie und du machst deine Schnittstelle zu komplex.

%Vor%

Funktional gleich, aber Sie möchten wahrscheinlich 3 anzeigen, dass getVect den Klassenstatus nicht ändert, damit const Semantik korrekt angewendet werden kann.

%Vor%

Es erscheint sehr unwahrscheinlich, dass Sie dies wollen, nachdem Sie GetVect aufgerufen haben. Das interne vect enthält keine Elemente mehr.

%Vor%

Dies sollte am Ende dasselbe wie 4 sein, Sie rufen einfach den move -Konstruktor des Rückgabeobjekts explizit auf.

Für die Leistung, die Sie eigentlich wollen, ist dies:

%Vor%

Auf diese Weise können Sie das Objekt lesen, ohne es kopieren zu müssen. Wenn Sie in den zurückgegebenen Vektor schreiben möchten, erstellen Sie explizit eine Kopie. Weitere Details finden Sie in diese Frage

    
KillianDS 27.02.2015, 08:48
quelle

Tags und Links