Maison > développement back-end > C++ > Pourquoi les initialiseurs en classe C 11 n'autorisent-ils pas les parenthèses ?

Pourquoi les initialiseurs en classe C 11 n'autorisent-ils pas les parenthèses ?

Susan Sarandon
Libérer: 2024-12-20 05:55:09
original
272 Les gens l'ont consulté

Why Don't C  11 In-Class Initializers Allow Parentheses?

Ambiguïté dans les initialiseurs de classe : le rôle des accolades et des égaux

En C 11, les initialiseurs de membres en classe ne peuvent être définis qu'à l'aide de curl accolades ({}) ou le signe égal (=). Cette restriction soulève la question de savoir pourquoi les parenthèses ne sont pas autorisées à cette fin.

L'une des principales raisons de cette limitation réside dans le potentiel d'ambiguïté syntaxique. Considérons la classe suivante :

class BadTimes {
public:
    struct Overloaded;
    int Overloaded;            // Data member

    int confusing(Overloaded); // Function declaration
};
Copier après la connexion

Si les parenthèses étaient autorisées pour les initialiseurs, la ligne "int confusion(Overloaded);" pourrait être ambigu. Il pourrait être interprété soit comme une déclaration de fonction (comme indiqué ci-dessus), soit comme une initialisation de variable membre si des parenthèses étaient utilisées pour l'initialiseur :

int confusing{Overloaded};
Copier après la connexion

Pour éliminer cette ambiguïté, des accolades ou le signe égal sont requis . Cela garantit qu'il n'y a pas de confusion entre les initialiseurs de variables membres et les déclarations de fonction :

class BadTimes {
public:
    struct Overloaded;
    int Overloaded;

    int confusing{Overloaded}; // Member variable initialized with Overloaded
};
Copier après la connexion

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 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