5

我目前对以下语句感到困惑-尽管此语句会在编译时产生错误,但事实并非如此。

// statement 1:
someclass* q(someclass());

我明白如果声明是这样的

// statement 2:
someclass* q(&someclass());

我想知道为什么语句 1 不会产生错误,或者即使它是有效的(我在幕后遗漏了什么?)

4

2 回答 2

12

我想知道为什么语句 1 不会产生错误,或者即使那是有效的

第一条语句是有效的,尽管它可能没有按照您的预期执行:该语句声明了一个名为的函数q,该函数返回一个指向类型对象的指针,someclass并接受输入一个函数,该函数又不接受任何参数并返回一个类型的对象someclass. 这被称为最令人烦恼的解析

第二条语句无效:它试图声明一个指向q类型为 的对象的someclass指针,并将该指针初始化为由someclass()表达式构造的对象的地址。但是请注意,这someclass()是一个临时的,并且使用临时地址是非法的。

于 2013-03-15T22:59:40.910 回答
3

语句 1 实际上是一个函数的声明。这个函数被调用q,它接受一个指向不带参数并返回一个函数的someclass指针,并返回一个指向 的指针someclass

请参阅最令人烦恼的解析

于 2013-03-15T22:59:33.920 回答