Ambiguïté dans les initialiseurs de classe : le rôle des accolades et des égaux
En C 11, les initialiseurs de membres en classe ne peuvent être définis qu'à l'aide de curl accolades ({}) ou le signe égal (=). Cette restriction soulève la question de savoir pourquoi les parenthèses ne sont pas autorisées à cette fin.
L'une des principales raisons de cette limitation réside dans le potentiel d'ambiguïté syntaxique. Considérons la classe suivante :
class BadTimes { public: struct Overloaded; int Overloaded; // Data member int confusing(Overloaded); // Function declaration };
Si les parenthèses étaient autorisées pour les initialiseurs, la ligne "int confusion(Overloaded);" pourrait être ambigu. Il pourrait être interprété soit comme une déclaration de fonction (comme indiqué ci-dessus), soit comme une initialisation de variable membre si des parenthèses étaient utilisées pour l'initialiseur :
int confusing{Overloaded};
Pour éliminer cette ambiguïté, des accolades ou le signe égal sont requis . Cela garantit qu'il n'y a pas de confusion entre les initialiseurs de variables membres et les déclarations de fonction :
class BadTimes { public: struct Overloaded; int Overloaded; int confusing{Overloaded}; // Member variable initialized with Overloaded };
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!