首页 > 后端开发 > C++ > 为什么 `vector v(istream_iterator(cin), istream_iterator());` 在 C 中声明一个函数?

为什么 `vector v(istream_iterator(cin), istream_iterator());` 在 C 中声明一个函数?

Susan Sarandon
发布: 2024-12-23 14:54:24
原创
378 人浏览过

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

最令人烦恼的解析中临时迭代器的令人困惑的情况

最令人烦恼的解析,C 中臭名昭著的解析歧义,带来了令人困惑的问题问题:如何将以下行解释为函数声明?

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
登录后复制

要理解这种奇怪的行为,我们必须深入研究最令人烦恼的解析的细节。第二个临时迭代器确实可以被解释为一种类型,即产生不带参数的迭代器的函数。然而,关键在于理解第一个临时迭代器的解释。

与第二个迭代器不同,第一个临时迭代器出现在括号内,并且缺乏明确的参数名称,令人困惑。这种非常规语法是 C 语言的遗留物,引发了这样的疑问:这个迭代器代表什么类型?

答案是 istream_iterator(cin) 本质上等同于 istream_iterator;辛。括号没有任何意义,只是多余的。这种奇怪的语法允许您在函数声明中任意将参数名称括在括号内。

最终,这段代码的令人困惑的本质源于它对这种过时语法的依赖。它声明第一个参数是 istream_iterator 。名为 cin.这种意外的行为凸显了此类语法遗留问题的缺点,可能导致代码中的混乱和歧义。

以上是为什么 `vector v(istream_iterator(cin), istream_iterator());` 在 C 中声明一个函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板