1

我们可以使用如下标准输入来初始化容器双端队列:

deque<int> c((istream_iterator<int>(cin)),(istream_iterator<int>()));

正如《C++ 标准库》所描述的,初始化参数周围的额外括号是必要的。没有它们,c 声明一个返回类型为 deque 的函数。它的第一个参数是名为 cin 的 istream_iterator 类型,第二个未命名参数的类型是“不带参数返回 istream_iterator 的函数”。看下面的代码

deque<int> c(istream_iterator<int>(cin),istream_iterator<int>());

但是额外的括号会强制初始化器与声明的语法不匹配。我不明白为什么额外的括号会使初始化程序与声明的语法不匹配。非常感谢。

4

1 回答 1

3

因为 C++ 标准中定义的语法不接受这种形式作为函数声明:

T name((U), (V));
于 2012-04-08T12:35:12.653 回答