Ordre d'initialisation des données membres non statiques
Dans ce scénario, nous avons deux données membres non statiques, a et b, déclarées au sein de la classe X. Une question courante se pose : dans quel ordre ces données membres sont-elles initialisées lorsque le constructeur de X est invoqué ?
Pour répondre à cette question question, nous nous tournons vers la section 12.6.2 de la norme C, qui décrit l'ordre d'initialisation des membres de la classe :
5 Initialization shall proceed in the following order: -- First, and only for the constructor of the most derived class as described below, virtual base classes shall be initialized in the order they appear on a depth-first left-to-right traversal of the directed acyclic graph of base classes... -- Then, direct base classes shall be initialized in declaration order as they appear in the base-specifier-list... -- Then, nonstatic data members shall be initialized in the order they were declared in the class definition... -- Finally, the body of the constructor is executed...
Sur la base de cette règle, l'ordre d'initialisation de a et b est déterminé uniquement par leur placement dans la définition de classe. Puisque a précède b, il sera initialisé en premier. Cela est vrai quel que soit l'ordre d'initialisation des membres explicitement spécifié dans le corps du constructeur.
Par conséquent, dans ce cas, le constructeur de A sera appelé avant le constructeur de B lorsque le constructeur de X est invoqué.
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!