在Stack Overflow教给我的许多东西中,有一个就是所谓的“最烦人的解析”,它的经典演示是这样的:
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()));
变通方法是写入标准的特定异常吗?
https://stackoverflow.com/questions/1424510
复制相似问题