我对值初始化的尝试被解释为函数声明,为什么不是A a(()); 解决这个问题?
经典地用一条线来证明
A a(B()); //declares a function
虽然这对于大多数人而言,直观地看起来是a
类型对象的声明A
,将临时B
对象作为构造函数参数,它实际上是一个函数a
返回的声明A
,将一个指针指向一个返回的函数,它B
本身不带参数。同样的线
A a(); //declares a function
也属于同一类别,因为它代替一个对象,它声明了一个函数。现在,在第一种情况下,这个问题的通常解决方法是在其周围添加一组额外的括号/括号B()
,因为编译器会将其解释为对象的声明
A a((B())); //declares an object
但是,在第二种情况下,执行相同操作会导致编译错误
A a(()); //compile error
我的问题是,为什么?是的我非常清楚正确的“解决方法”是将其更改为A a;
,但我很想知道()
第一个示例中的额外功能是什么,然后在重新应用它时不起作用第二个例子。A a((B()));
变通办法是否是写入标准的特定异常?
米琪卡哇伊
相关分类