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
Susan Sarandonoriginal
2024-12-15 14:12:151008parcourir

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);

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);

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:
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
Article précédent:Pourquoi `coutArticle suivant:Pourquoi `cout