Heim > Backend-Entwicklung > C++ > Warum wird der Kopierkonstruktor während der direkten Initialisierung in C nicht aufgerufen?

Warum wird der Kopierkonstruktor während der direkten Initialisierung in C nicht aufgerufen?

Patricia Arquette
Freigeben: 2024-12-16 17:01:09
Original
687 Leute haben es durchsucht

Why Isn't the Copy Constructor Called During Direct Initialization in C  ?

Kopierkonstruktor wird durch direkte Initialisierung aufgerufen

Im bereitgestellten Codeausschnitt können Sie erwarten, dass der Kopierkonstruktor aufgerufen wird, wenn A(5 zugewiesen wird ) zu a. Der Code ruft jedoch niemals den Kopierkonstruktor auf. Dieses Verhalten ist kein Ergebnis der Compileroptimierung, sondern eine dokumentierte Funktion von C.

Wenn Sie ein Objekt mithilfe der direkten Initialisierung (A a = A(5);) initialisieren, führt der Compiler eine Kopierelision durch. Durch diese Optimierung entfällt die unnötige Erstellung eines temporären Objekts, gefolgt von der Kopie dieses Objekts in die initialisierte Variable. Stattdessen wird die initialisierte Variable direkt mit dem Argument für den Konstruktor initialisiert.

Dieses Verhalten ist im C-Standard (§12.8.15, S. 211) dokumentiert, der besagt, dass die direkte Initialisierung dem Erstellen des entspricht Objekt direkt mit den Argumenten für den Konstruktor:

T x; // Default initialization
T x = y; // Direct initialization
Nach dem Login kopieren

In diesem Fall wird a direkt mit den Argumenten für den A-Konstruktor initialisiert, Umgehen des Kopierkonstruktors. Um den Compiler zu zwingen, den Kopierkonstruktor aufzurufen, müssen Sie zunächst standardmäßig a konstruieren:

A a;
// A is now a fully constructed object,
// so it can't call constructors again:
a = A(5);
Nach dem Login kopieren

Dadurch wird sichergestellt, dass der Kopierkonstruktor aufgerufen wird, wenn a der Wert A(5) zugewiesen wird.

Das obige ist der detaillierte Inhalt vonWarum wird der Kopierkonstruktor während der direkten Initialisierung in C nicht aufgerufen?. 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