我的问题是如何将以下行解析为函数声明:
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/