首页 > 后端开发 > C++ > 如何将'vector v(istream_iterator(cin), istream_iterator());”解释为 C 中的函数声明?

如何将'vector v(istream_iterator(cin), istream_iterator());”解释为 C 中的函数声明?

Susan Sarandon
发布: 2024-12-16 12:13:10
原创
221 人浏览过

How Can `vector v(istream_iterator(cin), istream_iterator());` Be Interpreted as a Function Declaration in C  ?

最令人烦恼的解析:澄清令人困惑的细节

在编程中,“最令人烦恼的解析”指的是 C 语法中臭名昭著的歧义这可能会导致意外的函数声明。本文旨在解开最令人烦恼的解析的一个令人困惑的方面。

考虑以下代码行:

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

如何将这一行解析为函数声明?

理解语法

通常,当第二个临时对象被解释为返回迭代器且不带参数的函数时,就会出现最令人烦恼的解析问题。然而,在这种情况下,第一个临时对象 istream_iterator(cin) 造成了困境。

第一个临时对象 istream_iterator(cin) 与 istream_iterator< 相同。整数> cin 带有多余的括号。这种语法是从 C 借用的,已被确认为错误。

解释

编译器将 istream_iterator(cin) 解释为参数的声明名为 cin,类型为 istream_iterator。括号不会影响语句的含义。

因此,该行代码被解释为带有一个参数 cin 的函数声明,其类型为 istream_iterator。该函数返回一个整数向量。

参数列表中的任意括号

istream_iterator(cin) 中 cin 周围的括号并不表明它是一个括号内函数的参数。相反,它们只是简单地包含一个计算结果为 istream_iterator 类型值的表达式。

结论

理解这种情况的关键是认识到多余的括号不会改变语句的含义。将 istream_iterator(cin) 解释为参数类型,而不是括号内的函数调用,消除了这个最令人烦恼的解析的特定示例中的混乱。

以上是如何将'vector v(istream_iterator(cin), istream_iterator());”解释为 C 中的函数声明?的详细内容。更多信息请关注PHP中文网其他相关文章!

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