Initialiseurs en classe : pourquoi la restriction Bracket ou Equals ?
En C 11, les initialiseurs en classe doivent se conformer à une syntaxe spécifique : ils doivent soit être placés entre accolades, soit suivre directement un signe égal (=). Toutefois, l'utilisation de parenthèses n'est pas autorisée. Comprendre la justification de cette exigence est crucial.
Prévenir l'ambiguïté syntaxique
La restriction découle du potentiel d'ambiguïté syntaxique. Considérons la classe suivante :
class AmbiguousSyntax { struct Overloaded; int Overloaded; int confusing(Overloaded); };
La ligne 4 est ambiguë si les parenthèses étaient autorisées pour les initialiseurs en classe. Cela pourrait potentiellement être interprété comme une déclaration d'une fonction membre nommée "confusing" acceptant un paramètre de type "Surchargé" ou une définition d'une variable membre "int" "confusing" initialisée à la valeur du membre de données "Surchargé".
Clarté grâce aux parenthèses
En exigeant des accolades pour les initialiseurs en classe, C 11 lève cette ambiguïté. Modification de l'exemple précédent :
class AmbiguousSyntax { struct Overloaded; int Overloaded; int confusing{Overloaded}; };
Maintenant, il est clair que « confusing » est un membre entier initialisé à la valeur « Surchargé », car l'utilisation de parenthèses pour les paramètres de fonction n'est pas autorisée.
Cette restriction syntaxique en C 11 garantit une différenciation claire entre les déclarations de fonction et les déclarations/initialisations de variables membres, améliorant ainsi la lisibilité du code et évitant toute confusion dans l'interprétation de initialiseurs en 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!