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
Libérer: 2024-12-23 14:54:24
original
441 Les gens l'ont consulté

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>());
Copier après la connexion

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!

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