Pourquoi la syntaxe d'initialisation directe est interdite pour les membres de données de classe
Les membres de données de classe C ne peuvent pas être initialisés à l'aide de la syntaxe d'initialisation directe (expression- list) en raison d’ambiguïtés potentielles d’analyse. Cela est évident dans l'exemple fourni :
class test { private: int s(3); // Compiler error };
Le compilateur génère des erreurs :
Selon les normes C, les données membres ne peuvent être initialisées qu'en utilisant la syntaxe suivante :
Raisons de la restriction
La syntaxe d'initialisation directe a été intentionnellement omise pour les données membres de la classe afin d'éviter toute ambiguïté. L'analyse des déclarations suivantes pourrait être difficile :
struct S { int i(x); // data member with initializer? static int x; }; struct T { int i(x); // member function declaration? typedef int x; };
Si la syntaxe d'initialisation directe était autorisée, il ne serait pas clair si int i(x) représente un membre de données avec un initialiseur ou une déclaration de fonction membre. Cette ambiguïté affecterait également les modèles.
Pour résoudre ce problème d'analyse, le Comité des normes C a décidé d'interdire la syntaxe d'initialisation directe pour les données membres de classe et de la réserver aux déclarations de fonctions et aux variables locales.
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!