Anomalie d'initialisation des membres de données en classe : plongée dans la norme C
Contrairement aux membres de données locaux qui peuvent être directement initialisés avec le () syntaxe, les données membres en classe défient cette méthode pratique. Cette particularité a laissé de nombreux programmeurs perplexes, suscitant des questions sur sa justification sous-jacente.
Selon la norme C, l'initialisation directe des membres de données de classe à l'aide de () est interdite pour éviter toute ambiguïté dans l'analyse. Considérons le scénario suivant :
class S { public: int i(x); // data member with initializer };
Sans la restriction, le compilateur pourrait devenir perplexe lorsqu'il essaie de déterminer si la déclaration fait référence à un membre de données avec un initialiseur ou une déclaration de fonction membre.
Par exemple :
struct S { int i(j); // member function declaration int j; // data member without an initializer };
L'application de la règle d'analyse existante qui donne la priorité aux fonctions membres par rapport aux données membres dans des situations ambiguës pourrait conduire à des interprétations incorrectes. Pour éviter une telle confusion, le standard C a choisi d'interdire l'initialisation directe des membres de données de classe.
Néanmoins, d'autres méthodes d'initialisation restent disponibles, comme l'utilisation de la syntaxe = initializer-clause :
int s = 3;
Ou la liste d'initialisation entourée d'accolades :
int s{3};
En adhérant à ces méthodes, les programmeurs peuvent initialiser efficacement la classe membres de données, bien qu'avec une syntaxe différente de celle de leurs homologues locaux.
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!