首页 > 后端开发 > C++ > 如何将 istream_iterator(cin) 解释为'最令人烦恼的解析”中的类型?

如何将 istream_iterator(cin) 解释为'最令人烦恼的解析”中的类型?

Mary-Kate Olsen
发布: 2024-12-17 01:51:24
原创
908 人浏览过

How Can `istream_iterator(cin)` Be Interpreted as a Type in the

函数声明中括号的歧义

在“最麻烦的解析”现象中,使用模板时会出现歧义。解析函数声明时就会出现这样的一个实例。考虑以下行:

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

该行可以解释为函数声明或变量声明。问题是,如何将第一个临时迭代器解释为类型?

与直觉相反,istream_iterator(cin) 不是函数声明。相反,它是一个创建 istream_iterator 的临时实例的表达式。使用输入流 cin 进行初始化。 cin 周围多余的括号不会改变这种解释。

这种特殊的语法是从 C 继承的,在 C 语言中,这种括号也被认为是一个错误。在这种情况下,括号不会影响表达式的含义。它只是充当不必要的噪音,导致混乱。

总之,给定行中的第一个临时迭代器表示类型 istream_iterator,而 cin 周围的括号只是多余的。但是,应谨慎使用这种不明确的语法,以避免潜在的误解。

以上是如何将 istream_iterator(cin) 解释为'最令人烦恼的解析”中的类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

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