Maison >développement back-end >C++ >Pourquoi les membres de données de classe ne peuvent-ils pas être initialisés à l'aide d'une syntaxe entre accolades ?
Pourquoi la syntaxe d'initialisation directe des membres de données de classe est interdite
En C, les membres de données de classe ne peuvent pas être initialisés à l'aide de ( ) syntaxe entre accolades. Considérez le code suivant :
class test { public: void fun() { int a(3); std::cout << a << '\n'; } private: int s(3); // Compiler error };
La compilation échoue avec des erreurs telles que :
Alors, pourquoi cette limitation ?
Selon les premières propositions C et les discussions standard, l'interdiction vise à éviter les ambiguïtés d'analyse . Si l'initialisation entre accolades était autorisée, le compilateur pourrait potentiellement mal interpréter les déclarations dans des situations telles que :
struct S { int i(x); // data member with initializer // Other code static int x; };
Ici, il n'est pas clair si i(x) est un initialiseur de données membre ou une déclaration de fonction membre, comme les deux suivent la même syntaxe.
Pour lever cette ambiguïté, C a opté pour les restrictions suivantes :
Cette décision évite les problèmes d'analyse et garantit la clarté 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!