Heim > Backend-Entwicklung > C++ > RVO vs. expliziter Zug in C 11: Wann sollte ich welchen verwenden?

RVO vs. expliziter Zug in C 11: Wann sollte ich welchen verwenden?

Barbara Streisand
Freigeben: 2024-12-21 07:11:09
Original
195 Leute haben es durchsucht

RVO vs. Explicit Move in C  11: When Should I Use Which?

Renditewertoptimierung vs. explizite Verschiebung in C 11: Was soll verwendet werden?

In C 11 haben Entwickler die Möglichkeit, die Leistung zu verbessern durch zwei Techniken: Rückgabewertoptimierung (RVO) und explizite Verschiebungsoperationen mit std::move. Bei der Überlegung, welcher Ansatz verwendet werden soll, ist es wichtig, die Unterschiede und ihre jeweilige Anwendbarkeit zu verstehen.

Return Value Optimization (RVO)

RVO ist eine Optimierungstechnik, die von der implementiert wird Compiler, der unnötige Kopiervorgänge eliminiert. Wenn die Return-Anweisung einer Funktion ein Objekt betrifft, dessen Lebensdauer unmittelbar nach der Ausführung der Funktion endet, kann der Compiler die Kopie optimieren, indem er den Wert des Objekts direkt zurückgibt und so dessen Erstellung und Zerstörung vermeidet.

Explizite Verschiebung Operation

Eine explizite Verschiebungsoperation mit std::move zwingt den Compiler dazu, den Besitz eines Objekts zu verschieben, anstatt es zu kopieren. Dies wird erreicht, indem das Objekt als R-Wert-Referenz übergeben und dann std::move für seinen Rückgabewert aufgerufen wird.

Welcher Ansatz soll verwendet werden?

Bei der Auswahl zwischen RVO und expliziter Bewegung, priorisieren Sie immer die Verwendung von RVO. Copy-Elision ist eine äußerst effektive Compiler-Optimierung, die die Leistung erheblich verbessern kann.

Wie im bereitgestellten Code-Snippet gezeigt, kann die gelesene Funktion mithilfe von RVO einen SerialBuffer zurückgeben:

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

Standardmäßig Der Compiler optimiert die Rückgabeoperation und macht das Kopieren nach Möglichkeit überflüssig.

Explizite Verschiebungsoperationen sollten nur verwendet werden, wenn RVO nicht angewendet werden kann. Wenn beispielsweise die Lebensdauer des Objekts über die Ausführung der Funktion hinausgeht, kann die Verwendung von std::move explizit die Absicht signalisieren, den Besitz des Objekts zu verschieben. Dies sollte jedoch ein seltenes Szenario sein und RVO sollte im Allgemeinen ausreichen.

Das obige ist der detaillierte Inhalt vonRVO vs. expliziter Zug in C 11: Wann sollte ich welchen verwenden?. 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