Heim > Backend-Entwicklung > C++ > C 11: RVO oder explizites „std::move' für Rückgabewerte?

C 11: RVO oder explizites „std::move' für Rückgabewerte?

Mary-Kate Olsen
Freigeben: 2024-12-24 08:57:14
Original
183 Leute haben es durchsucht

C  11: RVO or Explicit `std::move` for Return Values?

c 11 Rückgabewertoptimierung oder Verschiebung?

Beim Umgang mit Objekten mit Bewegungssemantik fragen sich Programmierer möglicherweise, ob sie explizit std verwenden sollen: :move oder verlassen Sie sich darauf, dass der Compiler die Rückgabewertoptimierung (RVO) durchführt. In Fällen wie diesen:

using SerialBuffer = vector< unsigned char >;

// let compiler optimize it
SerialBuffer read( size_t size ) const
{
    SerialBuffer buffer( size );
    read( begin( buffer ), end( buffer ) );
    // Return Value Optimization
    return buffer;
}

// explicit move
SerialBuffer read( size_t size ) const
{
    SerialBuffer buffer( size );
    read( begin( buffer ), end( buffer ) );
    return move( buffer );
}
Nach dem Login kopieren

Welcher Ansatz ist vorzuziehen?

Die Antwort ist klar: Verwenden Sie immer die erste Methode. Der Compiler ist bereits in der Lage, die Rückgabe zu optimieren, und die explizite Verwendung von std::move stört diese Optimierung tatsächlich.

Copy-Elision ermöglicht die Verwendung des Move-Konstruktors bei der Rückgabe einer R-Wert-Referenz auf eine lokal definierte Variable . Indem Sie das Ergebnis explizit verschieben, verhindern Sie, dass der Compiler diese Optimierung für Sie durchführt.

Für eine optimale Leistung bleiben Sie daher ausschließlich bei der ersten Methode ohne die explizite Verschiebung. Überlassen Sie die Optimierung dem Compiler, da dieser garantiert den effizientesten Code erzeugt.

Das obige ist der detaillierte Inhalt vonC 11: RVO oder explizites „std::move' für Rückgabewerte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage