Heim > Backend-Entwicklung > C++ > Warum wird der Kopierkonstruktor beim Zuweisen zu einem vorhandenen Objekt in C nicht aufgerufen?

Warum wird der Kopierkonstruktor beim Zuweisen zu einem vorhandenen Objekt in C nicht aufgerufen?

DDD
Freigeben: 2024-12-08 09:22:11
Original
575 Leute haben es durchsucht

Why Isn't the Copy Constructor Called When Assigning to an Existing Object in C  ?

Warum der Kopierkonstruktor umgangen wird, wenn einem vorhandenen Objekt ein neuer Wert zugewiesen wird

Im bereitgestellten Codeausschnitt wird ein Objekt a mit initialisiert der Wert 5. Der Standard-A-Konstruktor wird wie erwartet aufgerufen. Allerdings wird der Kopierkonstruktor entgegen der Annahme nicht beim Zuweisen des neu konstruierten Objekts aufgerufen.

Dieses Verhalten ist weder das Ergebnis einer Compileroptimierung noch ein Versäumnis in der Sprachspezifikation. Es ist explizit im C-Standard dokumentiert (§12.8.15, S. 211). Der Standard besagt, dass es „völlig akzeptabel“ ist, dass die folgenden Zuweisungen semantisch äquivalent sind:

T = x;
T(x);
Nach dem Login kopieren

Daraus folgt logischerweise, dass eine redundante Zuweisung wie T(T(x)) aus der Codeoptimierung entfernt werden kann . Daher ruft der Compiler automatisch den Standardkonstruktor auf, um a zu initialisieren, und weist dann das neu erstellte Objekt direkt zu.

Um den Aufruf des Kopierkonstruktors zu erzwingen, muss vor der Zuweisung explizit a standardmäßig erstellt werden:

A a; // Default-construct 'a'

// Copy constructor will be called to
// copy data from the newly constructed object.
a = A(5);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum wird der Kopierkonstruktor beim Zuweisen zu einem vorhandenen Objekt 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage