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 :
#include <iostream> class test { public: void fun() { int a(3); std::cout << a << '\n'; } private: int s(3); // Compiler error }; int main() { test t; t.fun(); return 0; }
La compilation échoue avec des erreurs :
11 9 [Error] expected identifier before numeric constant 11 9 [Error] expected ',' or '...' before numeric constant
Pourquoi est-ce le cas ?
Le standard C interdit explicitement cette syntaxe pour l'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 les données membres de classe initialisation :
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.
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!