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 完全相同但有多余的括号。这种声明符语法继承自 C,我认为即使是 C 的发明者(Ken Thompson?)也将其描述为一个错误。

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

相关文章:

c++ - 为什么我的检查在检查重复结果(指针)时不起作用

c++ - 使用 C++ 互操作在 Haskell 中构建简单的 DSL

内核 CUDA 中的 C++ 代码?

c++ - 当有额外的括号时,在临时对象上调用用户定义的 operator+ 时出错

C++: 奇怪的 "Request for member X of Y which is of non-class type Z"

c++ - 如何在ncurses C++中绘制坐标

c++ - ld:在 mac 上找不到体系结构 x86_64 的符号

c++ - 为什么没有调用构造函数?

c++ - 在 std::map 中使用 std::less 无法编译

c++ - 为什么没有为语句 "A x(A())"调用 A 的构造函数?