Maison > développement back-end > C++ > Quelle est l'analyse C la plus délicate et pourquoi interprète-t-elle « A a(A()); » comme une déclaration de fonction ?

Quelle est l'analyse C la plus délicate et pourquoi interprète-t-elle « A a(A()); » comme une déclaration de fonction ?

Barbara Streisand
Libérer: 2024-12-21 05:40:09
original
930 Les gens l'ont consulté

What is the C   Most Vexing Parse and Why Does It Interpret `A a(A());` as a Function Declaration?

L'analyse la plus vexante : un casse-tête en syntaxe C

Dans le monde labyrinthique de la syntaxe C, une énigme énigmatique se démarque : la plus Analyse vexante (MVP). Cette particularité syntaxique pose un défi aux programmeurs, en laissant beaucoup perplexes.

Le nœud du MVP réside dans l'interprétation ambiguë d'une certaine syntaxe :

A a( A() );
Copier après la connexion

Cette ligne déroutante peut être interprétée dans deux manières contradictoires :

  1. Définition de la variable :Une variable 'a' de la classe 'A' est défini, en prenant une instance anonyme de la classe 'A' comme valeur.
  2. Déclaration de fonction : Une fonction 'a' est déclarée, qui renvoie un objet de type 'A' et prend un seul argument sans nom qui est une fonction renvoyant 'A' et ne prenant aucune entrée.

Étonnamment, malgré le On s’attend généralement des programmeurs à ce que la première interprétation soit correcte, la norme C impose la seconde interprétation. Cela laisse beaucoup de gens perplexes, se demandant pourquoi un choix aussi inattendu et potentiellement déroutant a été fait.

Pour comprendre la justification du MVP, considérons un scénario hypothétique dans lequel il n'existait pas. Dans cette réalité alternative, comment une fonction serait-elle déclarée en C ?

A foo();
Copier après la connexion

L'utilisation de cette syntaxe aboutit malheureusement à une définition de variable plutôt qu'à une déclaration de méthode. Pour accommoder les déclarations de fonctions, un nouveau mot-clé ou une syntaxe peu pratique serait nécessaire.

Pour éviter de telles complexités, le standard C a opté pour une règle plus simple : "Tout ce qui peut être interprété comme une déclaration sera interprété comme un déclaration." Cela englobe à la fois les définitions de variables et les déclarations de fonctions. Ainsi, la syntaxe

A a;
Copier après la connexion

définit une variable, tandis que

A a();
Copier après la connexion

déclare une fonction.

L'adoption de cette règle garantit la cohérence de la syntaxe, éliminant le besoin de cas particuliers. Bien que cela puisse initialement désorienter les programmeurs, cela favorise finalement la clarté et la cohérence du langage.

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