En C , les membres de données de classe ne peuvent pas être initialisés à l'aide de la syntaxe d'initialisation directe (), comme le montre l'exemple suivant :
#includeclass test { public: void fun() { int a(3); std::cout La compilation échoue avec des erreurs :
11 9 [Error] expected identifier before numeric constant 11 9 [Error] expected ',' or '...' before numeric constantPourquoi est-ce le cas ?
La norme C interdit explicitement cette syntaxe pour initialisation des membres de données de classe. Les premières propositions pour l'introduction de la fonctionnalité citent des problèmes d'analyse comme raison.
Considérez cet exemple ambigu :
struct S { int i(x); // data member with initializer or... // ... static int x; int i(y); // member function declaration // ... typedef int y; };La norme propose une solution :
Pour éliminer toute ambiguïté, la norme C autorise uniquement la syntaxe suivante pour l'initialisation des membres de données de classe :
- = initializer-clause
- { initializer-list }
Cette résolution garantit la clarté et évite tout risque de malentendu dans les cas où une déclaration pourrait ressembler à la fois à une déclaration d'objet et à une déclaration de fonction.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3