Maison >développement back-end >C++ >Pourquoi `vector v(istream_iterator(cin), istream_iterator());` déclare-t-il une fonction en C ?

Pourquoi `vector v(istream_iterator(cin), istream_iterator());` déclare-t-il une fonction en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-23 14:54:24428parcourir

Why Does `vector v(istream_iterator(cin), istream_iterator());` Declare a Function in C  ?

Le cas déroutant des itérateurs temporaires dans l'analyse la plus vexante

L'analyse la plus vexante, une ambiguïté d'analyse notoire en C, pose un problème déroutant question : comment la ligne suivante peut-elle être interprétée comme une fonction déclaration ?

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());

Pour comprendre ce comportement particulier, nous devons nous plonger dans les détails de l'analyse la plus vexante. Le deuxième itérateur temporaire peut en effet être interprété comme un type, à savoir une fonction qui produit un itérateur sans paramètres. Cependant, le point crucial réside dans la compréhension de l'interprétation du premier itérateur temporaire.

Contrairement au deuxième itérateur, le premier itérateur temporaire apparaît entre parenthèses de manière confuse et n'a pas de nom de paramètre explicite. Cette syntaxe non conventionnelle, héritage du C, suscite la requête : quel type représente cet itérateur ?

La réponse est que istream_iterator(cin) est essentiellement équivalent à istream_iterator cin. Les parenthèses n’ont aucun sens et sont simplement superflues. Cette curieuse syntaxe vous permet de placer arbitrairement des noms d'arguments entre parenthèses dans les déclarations de fonctions.

En fin de compte, la nature déroutante de ce code vient de sa dépendance à l'égard de cette syntaxe obsolète. Il déclare que le premier paramètre est un istream_iterator nommé Cin. Ce comportement inattendu souligne les inconvénients de ces reliques syntaxiques, conduisant potentiellement à la confusion et à l'ambiguïté dans le code.

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