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

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