Maison >développement back-end >C++ >Pourquoi l'ordre d'initialisation des membres dans les constructeurs C diffère-t-il de l'ordre de la liste d'initialisation ?

Pourquoi l'ordre d'initialisation des membres dans les constructeurs C diffère-t-il de l'ordre de la liste d'initialisation ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-19 04:12:50544parcourir

Why Does Member Initialization Order in C   Constructors Differ from the Initializer List Order?

Ordre d'évaluation de la liste d'initialisation des membres

Lorsque vous travaillez avec des constructeurs qui initialisent des membres de classe, il est crucial de comprendre l'ordre dans lequel ces initialisations se produisent. Explorons un scénario dans lequel l'ordre d'initialisation attendu n'a pas été suivi, entraînant un comportement inattendu.

Dans le code fourni, une classe A est définie avec les variables membres a_ et b_. Le constructeur prend des arguments pour initialiser les deux membres. Le programmeur a supposé que les membres seraient initialisés dans l’ordre indiqué : d’abord a_ puis b_. Cependant, dans un cas précis, il a été observé que b_ était initialisé avant a_, provoquant un abandon lorsque a_ était référencé avant son initialisation.

Pour garantir le bon ordre d'initialisation, il est essentiel de savoir que l'ordre est déterminé par les déclarations de données membres dans la définition de classe. Dans l'exemple ci-dessus, a_ est déclaré en premier dans la classe, suivi de b_. Par conséquent, a_ sera toujours initialisé avant b_, quel que soit l'ordre dans la liste d'initialisation des membres, résolvant ainsi le problème rencontré par le programmeur.

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