首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对构造函数的调用可以视为函数声明吗?

对构造函数的调用可以视为函数声明吗?
EN

Stack Overflow用户
提问于 2012-01-17 23:19:59
回答 1查看 1.2K关注 0票数 4

接下来我要写的几行来自“C++标准库-教程和参考”一书。

使用标准输入初始化:

代码语言:javascript
复制
//read all integer elements of the deque from standard input
std::deque<int> c((std::istream_iterator<int>(std::cin)),
(std::istream_iterator<int>()));

这里不要忘记初始化器参数周围的额外括号。否则,这个表达式会做一些非常不同的事情,您可能会在下面的语句中得到一些奇怪的警告或错误。考虑在不加括号的情况下编写语句:

代码语言:javascript
复制
std::deque<int> c(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>());

在本例中,c声明一个函数,其返回类型为deque。其第一个参数为名称cin的istream_iterator类型,第二个未命名参数为“函数不带返回istream_iterator的参数”。此构造作为声明或表达式在语法上是有效的。因此,根据语言规则,它被视为一种声明。额外的括号强制初始化器与声明的语法不匹配。

我明白为什么带额外括号的那个不被认为是一个函数声明,但是我看不出是什么使不加括号的那个变成函数声明呢?因为它在(std::cin)周围有括号,据我所知,变量可能没有带括号的名称?

我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2012-01-17 23:24:06

如果可以将语句解析为函数原型或带有构造函数参数的变量声明,则函数原型优先。这与大多数人的期望相反,因此被命名为最令人烦恼的Parse

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8903082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档