L'analyse la plus vexante : clarifier un détail déroutant
En programmation, "l'analyse la plus vexante" fait référence à une ambiguïté notoire dans la syntaxe C cela peut conduire à des déclarations de fonctions inattendues. Cet article vise à démêler l'un de ces aspects déroutants de l'analyse la plus délicate.
Considérez la ligne de code suivante :
vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
Comment cette ligne peut-elle être analysée comme une déclaration de fonction ?
Comprendre la syntaxe
Normalement, le plus Un problème d'analyse vexant survient lorsqu'un deuxième objet temporaire est interprété comme une fonction renvoyant un itérateur et ne prenant aucun argument. Cependant, dans ce cas, c'est le premier objet temporaire, istream_iterator
Le premier objet temporaire, istream_iterator
L'interprétation
Le compilateur interprète istream_iterator
Par conséquent, la ligne de code est interprétée comme une déclaration de fonction avec un paramètre, cin, qui est de type istream_iterator
Parenthèses arbitraires dans les listes d'arguments
Les parenthèses autour de cin dans istream_iterator
Conclusion
La clé pour comprendre ce cas est de reconnaître que le superflu les parenthèses ne modifient pas le sens de la déclaration. L'interprétation de istream_iterator
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!