c++ - 关于最令人烦恼的解析的一个令人困惑的细节

标签 c++ most-vexing-parse

我的问题是如何将以下行解析为函数声明:

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());

我理解 Most Vexing Parse 的大部分细节,以及为什么第二个临时迭代器可以解释为一种返回迭代器且不带参数的函数类型,但我不明白的是为什么第一个临时迭代器迭代器可以解释为一种类型。它代表什么类型?我的想法是它会是某种函数类型,但我看不出名字 cin 是怎么来的习惯了。它是否声明该参数是一个 istream_iterator<int>名为 cin ?如果是这样,是否意味着您可以任意将函数参数的名称括起来?如果是这样,为什么?

最佳答案

istream_iterator<int>(cin)istream_iterator<int> cin 完全相同但是有多余的parens。这种声明符语法是从 C 继承而来的,我认为甚至 C 的发明者(Ken Thompson?)也将其描述为一个错误。

关于c++ - 关于最令人烦恼的解析的一个令人困惑的细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53857698/

相关文章:

c++ - 求组合的几个循环代码如何转化为递归的方法?

c++ - 如何识别 LLVM 位码中的循环?

c++ - 这个语法是什么意思

C++构造函数问题

c++ - 默认构造函数 C++

C++ 诡异的构造函数

c++ - 模板 lambda 有时无法编译

c++ - 如何从 VirtualBox 日志文件中理解和调试?

c++ - 重载运算符和链接

c++ - 使用参数化构造函数时不存在编译错误