Maison >développement back-end >C++ >Pourquoi la syntaxe d'initialisation directe est-elle interdite pour les membres de données de classe en C ?

Pourquoi la syntaxe d'initialisation directe est-elle interdite pour les membres de données de classe en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-17 02:08:03250parcourir

Why is Direct Initialization Syntax Forbidden for Class Data Members in C  ?

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 :

  • "identifiant attendu avant la constante numérique"
  • "attendu ',' ou '...' avant la constante numérique"

Selon les normes C, les données membres ne peuvent être initialisées qu'en utilisant la syntaxe suivante :

  • Initialisation de l'affectation : = initializer-clause
  • Initialisation de l'accolade : { initializer-list }

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn