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