Heim > Backend-Entwicklung > C++ > Sollte Pass-by-Value die Standardeinstellung in C 11 für große Objekte sein?

Sollte Pass-by-Value die Standardeinstellung in C 11 für große Objekte sein?

Patricia Arquette
Freigeben: 2024-12-02 17:35:11
Original
375 Leute haben es durchsucht

Should Pass-by-Value Be the Default in C  11 for Large Objects?

Überdenken der Wertübergabe in C 11

In traditionellem C führte die Wertübergabe in Funktionen zu Leistungseinbußen bei großen Objekten . Daher entschieden sich C-Programmierer für „Pass-by-Reference“, was die Geschwindigkeit steigerte, aber auch Komplexitäten bei der Besitz- und Speicherverwaltung mit sich brachte, insbesondere für Heap-zugewiesene Objekte.

C 11 führte Rvalue-Referenzen und Verschiebungskonstruktoren ein und ermöglichte so ein effizientes Pass-by -Wert für große Objekte wie std::vector und std::string. Dies wirft die Frage auf, ob die Wertübergabe zur Standardeinstellung für solche Typen werden sollte.

Wertübergabe: Eine neue Standardeinstellung?

Laut Dave Abrahams Die Wertübergabe kann die bevorzugte Standardeinstellung sein, wenn innerhalb der Funktion ein Kopieren erforderlich ist. Indem Programmierer das Kopieren dem Compiler überlassen, können sie explizite Kopiervorgänge vermeiden:

void foo(T t) {
    // ...
}
Nach dem Login kopieren

Im Vergleich zur Referenzübergabe:

void foo(T const& t) {
    auto copy = t;
    // ...
}
Nach dem Login kopieren

Pass-by-Value bietet Flexibilität für den Aufrufer :

T lval;
foo(lval); // copy from lvalue
foo(T {}); // (potential) move from prvalue
foo(std::move(lval)); // (potential) move from xvalue
Nach dem Login kopieren

Ausnahmen von Wertübergabe

Während die Wertübergabe für einige Typen geeignet sein kann, bleibt die Übergabe per Referenz an const eine sinnvolle Option:

  • Objekte die nicht kopiert werden sollten: Durch die Übergabe einer Referenz wird sichergestellt, dass keine unnötige Kopie erstellt wird.
  • Große Objekte, die häufig übergeben werden nach Wert: Der Kopiervorgang kann auch bei Verschiebungssemantik immer noch teuer sein.
  • Objekte, die zwischen Threads übertragen werden: Die Übergabe als Referenz ermöglicht eine effiziente Thread-Synchronisierung.

Das obige ist der detaillierte Inhalt vonSollte Pass-by-Value die Standardeinstellung in C 11 für große Objekte sein?. 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