Maison >développement back-end >C++ >Pourquoi ne pouvons-nous pas utiliser des parenthèses pour initialiser les membres de données en classe en C ?

Pourquoi ne pouvons-nous pas utiliser des parenthèses pour initialiser les membres de données en classe en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-15 13:44:02330parcourir

Why Can't We Use Parentheses to Initialize In-Class Data Members in C  ?

Anomalie d'initialisation des membres de données en classe : plongée dans la norme C

Contrairement aux membres de données locaux qui peuvent être directement initialisés avec le () syntaxe, les données membres en classe défient cette méthode pratique. Cette particularité a laissé de nombreux programmeurs perplexes, suscitant des questions sur sa justification sous-jacente.

Selon la norme C, l'initialisation directe des membres de données de classe à l'aide de () est interdite pour éviter toute ambiguïté dans l'analyse. Considérons le scénario suivant :

class S {
public:
    int i(x); // data member with initializer
};

Sans la restriction, le compilateur pourrait devenir perplexe lorsqu'il essaie de déterminer si la déclaration fait référence à un membre de données avec un initialiseur ou une déclaration de fonction membre.

Par exemple :

struct S {
    int i(j); // member function declaration
    int j; // data member without an initializer
};

L'application de la règle d'analyse existante qui donne la priorité aux fonctions membres par rapport aux données membres dans des situations ambiguës pourrait conduire à des interprétations incorrectes. Pour éviter une telle confusion, le standard C a choisi d'interdire l'initialisation directe des membres de données de classe.

Néanmoins, d'autres méthodes d'initialisation restent disponibles, comme l'utilisation de la syntaxe = initializer-clause :

int s = 3;

Ou la liste d'initialisation entourée d'accolades :

int s{3};

En adhérant à ces méthodes, les programmeurs peuvent initialiser efficacement la classe membres de données, bien qu'avec une syntaxe différente de celle de leurs homologues locaux.

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