Maison > développement back-end > C++ > Pourquoi les initialiseurs en classe C 11 ne peuvent-ils pas utiliser de parenthèses ?

Pourquoi les initialiseurs en classe C 11 ne peuvent-ils pas utiliser de parenthèses ?

DDD
Libérer: 2024-12-21 13:50:12
original
314 Les gens l'ont consulté

Why Can't C  11 In-Class Initializers Use Parentheses?

Initialiseurs en classe : pourquoi la restriction Bracket ou Equals ?

En C 11, les initialiseurs en classe doivent se conformer à une syntaxe spécifique : ils doivent soit être placés entre accolades, soit suivre directement un signe égal (=). Toutefois, l'utilisation de parenthèses n'est pas autorisée. Comprendre la justification de cette exigence est crucial.

Prévenir l'ambiguïté syntaxique

La restriction découle du potentiel d'ambiguïté syntaxique. Considérons la classe suivante :

class AmbiguousSyntax {
    struct Overloaded;
    int Overloaded;
    
    int confusing(Overloaded);
};
Copier après la connexion

La ligne 4 est ambiguë si les parenthèses étaient autorisées pour les initialiseurs en classe. Cela pourrait potentiellement être interprété comme une déclaration d'une fonction membre nommée "confusing" acceptant un paramètre de type "Surchargé" ou une définition d'une variable membre "int" "confusing" initialisée à la valeur du membre de données "Surchargé".

Clarté grâce aux parenthèses

En exigeant des accolades pour les initialiseurs en classe, C 11 lève cette ambiguïté. Modification de l'exemple précédent :

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

Maintenant, il est clair que « confusing » est un membre entier initialisé à la valeur « Surchargé », car l'utilisation de parenthèses pour les paramètres de fonction n'est pas autorisée.

Cette restriction syntaxique en C 11 garantit une différenciation claire entre les déclarations de fonction et les déclarations/initialisations de variables membres, améliorant ainsi la lisibilité du code et évitant toute confusion dans l'interprétation de initialiseurs en classe.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal