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
Barbara Streisandoriginal
2024-12-21 05:40:09946parcourir

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() );

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();

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;

définit une variable, tandis que

A a();

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!

Déclaration:
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