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
Libérer: 2024-11-15 13:44:02
original
282 Les gens l'ont consulté

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

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

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

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

int s{3};
Copier après la connexion

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!

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