Maison > développement back-end > C++ > Quel est le problème avec la mise entre parenthèses des noms d'arguments dans l'analyse la plus contrariante ?

Quel est le problème avec la mise entre parenthèses des noms d'arguments dans l'analyse la plus contrariante ?

DDD
Libérer: 2024-12-14 19:10:12
original
871 Les gens l'ont consulté

What's the Deal with Parenthesizing Argument Names in the Most Vexing Parse?

Comprendre l'ambiguïté dans l'analyse la plus contrariante : mettre entre parenthèses les noms d'arguments

L'analyse la plus contrariante fait référence à une ambiguïté grammaticale en C qui peut conduire à des résultats inattendus lors de la déclaration de fonctions . Un détail déroutant qui surgit est la possibilité d'analyser certaines lignes comme des déclarations de fonction, même lorsqu'elles ne semblent pas conformes à la syntaxe attendue.

Considérez la ligne suivante :

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
Copier après la connexion

Cette ligne peut être interprété comme une déclaration de fonction en raison de l'analyse la plus vexante. Le premier itérateur temporaire, istream_iterator(cin), est analysé comme un type, tandis que le deuxième itérateur temporaire, istream_iterator(), est interprété comme une fonction renvoyant un itérateur sans argument.

Cependant, il n’est pas immédiatement clair quel type représente le premier itérateur temporaire. La clé pour comprendre cela est de réaliser que istream_iterator(cin) est équivalent à istream_iterator cin. Les parenthèses sont superflues et n’altèrent pas le sens de l’expression. Cela signifie que le premier itérateur temporaire est un istream_iterator de type int nommé cin.

Cela soulève la question de savoir s'il est possible de mettre arbitrairement entre parenthèses les noms d'arguments dans les appels de fonction. La réponse est oui, vous pouvez mettre entre parenthèses les noms d’arguments si vous souhaitez les mettre en évidence ou clarifier leur objectif. Cependant, cela est généralement déconseillé car cela peut conduire à un code confus ou inattendu. L'objectif principal de cette syntaxe est de prendre en charge une syntaxe héritée du C et n'est pas considérée comme une bonne pratique dans le code C moderne.

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