Maison >développement back-end >C++ >Comment garantir l'ordre d'initialisation dans les listes d'initialisation des membres C ?

Comment garantir l'ordre d'initialisation dans les listes d'initialisation des membres C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-14 09:12:12793parcourir

How to Guarantee Initialization Order in C   Member Initializer Lists?

Ordre d'initialisation dans les listes d'initialisation de membres

En C, les constructeurs initialisent souvent les variables membres à l'aide d'une liste d'initialisation de membres. Cependant, l'ordre dans lequel ces variables sont initialisées peut prêter à confusion.

Considérez le constructeur suivant :

class A {
public:
    OtherClass a_;
    AnotherClass b_;

    A(OtherClass o, string x, int y)
    : a_(o)
    , b_(a_, x, y) {}
};

Problème :

À l'origine, on a supposé que les variables étaient initialisées dans l'ordre indiqué dans la liste d'initialisation : a_ d'abord, puis b_. Cependant, un problème est survenu lorsqu'il s'est avéré que les variables étaient initialisées dans l'ordre inverse.

Question :

Comment contrôler l'ordre d'initialisation pour garantir que a_ est initialisé avant b_ ?

Réponse :

L'ordre de l'initialisation dépend de l'ordre des déclarations de données membres dans la classe. Dans cet exemple, a_ est déclaré avant b_, il sera donc initialisé en premier.

Par conséquent, pour garantir l'ordre d'initialisation souhaité, il est crucial de déclarer les données membres dans le bon ordre dans la définition de la classe.

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