Maison > développement back-end > C++ > Pourquoi le constructeur de copie n'est-il pas appelé dans « A a = A(5); » ?

Pourquoi le constructeur de copie n'est-il pas appelé dans « A a = A(5); » ?

Susan Sarandon
Libérer: 2024-12-15 14:12:15
original
1112 Les gens l'ont consulté

Why Isn't the Copy Constructor Called in `A a = A(5);`?

Comprendre pourquoi le constructeur de copie n'est pas appelé

Dans l'extrait de code fourni, le constructeur de classe A n'est pas invoqué pour l'objet de gauche, malgré le en supposant que cela devrait être le cas. Ce comportement n'est pas dû à l'optimisation du compilateur mais plutôt à une fonctionnalité établie de C .

Selon le standard C (§12.8.15), l'instruction T = x; est équivalent à T(x);. Ainsi, dans l'extrait de code :

A a = A(5);
Copier après la connexion

Le système construit d'abord A(5) puis l'assigne à a. Le constructeur de copie n'est pas invoqué car l'opérateur d'affectation (=) est utilisé.

Pour forcer le compilateur à construire l'objet de gauche par défaut, on peut écrire le code suivant :

A a;
// a is now a fully constructed object
a = A(5);
Copier après la connexion

Dans ce scénario, a est construit par défaut en premier, et le constructeur de copie est ensuite invoqué en raison de la construction complète de l'objet.

Par conséquent, il est crucial de soyez conscient de ce comportement et de ses implications potentielles dans la programmation C.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal