首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我的值初始化尝试被解释为函数声明,为什么A a(());不能解决它?

我的值初始化尝试被解释为函数声明,为什么A a(());不能解决它?
EN

Stack Overflow用户
提问于 2009-09-15 00:13:23
回答 5查看 19.2K关注 0票数 161

在Stack Overflow教给我的许多东西中,有一个就是所谓的“最烦人的解析”,它的经典演示是这样的:

代码语言:javascript
复制
A a(B()); //declares a function

虽然对于大多数人来说,这直观地看起来是A类型的对象a的声明,将临时B对象作为构造函数参数,但它实际上是函数a的声明,返回A,接受指向返回B的函数的指针,并且本身不带参数。类似地,这条线

代码语言:javascript
复制
A a(); //declares a function

也属于同一类别,因为它声明的不是对象,而是函数。现在,在第一种情况下,解决此问题的通常方法是在B()周围添加额外的一组括号/括号,因为编译器随后会将其解释为对象的声明

代码语言:javascript
复制
A a((B())); //declares an object

但是,在第二种情况下,这样做会导致编译错误

代码语言:javascript
复制
A a(()); //compile error

我的问题是,为什么?是的,我很清楚正确的“变通办法”是把它改成A a;,但我很好奇,在第一个例子中额外的()对编译器做了什么,然后在第二个例子中重新应用它时就不起作用了。A a((B()));变通方法是写入标准的特定异常吗?

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

https://stackoverflow.com/questions/1424510

复制
相关文章

相似问题

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