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
DDDoriginal
2024-12-14 19:10:12849parcourir

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

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!

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