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
Libérer: 2024-11-17 02:08:03
original
242 Les gens l'ont consulté

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
};
Copier après la connexion

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;
};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal