下面的几行内容来自《C++标准库-教程与参考手册》:
不要忘记在初始化参数周围加上额外的括号。否则,这个表达式会做一些非常不同的事情,并且您可能会在后续语句中收到一些奇怪的警告或错误。考虑不使用额外的括号编写该语句:
在这种情况下,c声明了一个返回类型为deque的函数。它的第一个参数是名为cin的istream_iterator类型,第二个未命名参数是一个不带参数并返回istream_iterator类型的函数。这种结构在语法上既可以作为声明也可以作为表达式。因此,根据语言规则,它被视为声明。额外的括号强制初始化程序不匹配声明的语法。
我可以理解为什么有额外括号的那个不被认为是函数声明,但是没有括号的那个是什么让它成为函数声明呢?因为它的std::cin周围有括号,据我所知,变量的名称不应该包含括号?
我有什么遗漏吗?
通过使用标准输入初始化:
//read all integer elements of the deque from standard input
std::deque<int> c((std::istream_iterator<int>(std::cin)),
(std::istream_iterator<int>()));
不要忘记在初始化参数周围加上额外的括号。否则,这个表达式会做一些非常不同的事情,并且您可能会在后续语句中收到一些奇怪的警告或错误。考虑不使用额外的括号编写该语句:
std::deque<int> c(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>());
在这种情况下,c声明了一个返回类型为deque的函数。它的第一个参数是名为cin的istream_iterator类型,第二个未命名参数是一个不带参数并返回istream_iterator类型的函数。这种结构在语法上既可以作为声明也可以作为表达式。因此,根据语言规则,它被视为声明。额外的括号强制初始化程序不匹配声明的语法。
我可以理解为什么有额外括号的那个不被认为是函数声明,但是没有括号的那个是什么让它成为函数声明呢?因为它的std::cin周围有括号,据我所知,变量的名称不应该包含括号?
我有什么遗漏吗?