我目前对以下语句感到困惑-尽管此语句会在编译时产生错误,但事实并非如此。
// statement 1:
someclass* q(someclass());
我明白如果声明是这样的
// statement 2:
someclass* q(&someclass());
我想知道为什么语句 1 不会产生错误,或者即使它是有效的(我在幕后遗漏了什么?)
我目前对以下语句感到困惑-尽管此语句会在编译时产生错误,但事实并非如此。
// statement 1:
someclass* q(someclass());
我明白如果声明是这样的
// statement 2:
someclass* q(&someclass());
我想知道为什么语句 1 不会产生错误,或者即使它是有效的(我在幕后遗漏了什么?)
我想知道为什么语句 1 不会产生错误,或者即使那是有效的
第一条语句是有效的,尽管它可能没有按照您的预期执行:该语句声明了一个名为的函数q
,该函数返回一个指向类型对象的指针,someclass
并接受输入一个函数,该函数又不接受任何参数并返回一个类型的对象someclass
. 这被称为最令人烦恼的解析。
第二条语句无效:它试图声明一个指向q
类型为 的对象的someclass
指针,并将该指针初始化为由someclass()
表达式构造的对象的地址。但是请注意,这someclass()
是一个临时的,并且使用临时地址是非法的。
语句 1 实际上是一个函数的声明。这个函数被调用q
,它接受一个指向不带参数并返回一个函数的someclass
指针,并返回一个指向 的指针someclass
。
请参阅最令人烦恼的解析。