C 11 introduit des initialiseurs en classe, qui permettent d'initialiser les variables membres directement dans la définition de la classe. Cependant, ces initialiseurs doivent respecter des règles de syntaxe spécifiques.
Question :
Pourquoi est-il obligatoire que les initialiseurs en classe utilisent soit le signe égal (=) ou curl accolades ({}) ?
Réponse :
Cette exigence sert à éliminer les ambiguïtés syntaxiques potentielles.
Considérons l'exemple suivant :
class BadTimes { struct Overloaded; int Overloaded; // Legal, but unusual. int confusing(Overloaded); // <-- Ambiguous line };
La ligne problématique pourrait être interprétée de deux manières :
Cette ambiguïté survient en raison de l'utilisation de parenthèses, qui peuvent désigner à la fois les déclarations de méthode et l'initialisation d'objet.
Pour résoudre cette confusion, C 11 impose l'utilisation d'accolades pour les initialiseurs en classe. Cela indique explicitement que la confusion est une variable membre :
class BadTimes { struct Overloaded; int Overloaded; // Legal, but unusual. int confusing{Overloaded}; // <-- Clear initialization };
Ainsi, les initialiseurs en classe doivent utiliser des accolades égales ou bouclées pour éviter les malentendus de syntaxe et garantir la lisibilité du code.
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!