我目前对以下语句感到困惑 - 虽然这个语句在编译期间会产生错误,但事实并非如此。
// statement 1:
someclass* q(someclass());
我理解这句话是否像这样
// statement 2:
someclass* q(&someclass());
我想知道为什么声明1不会产生错误,或者即使它有效(我在幕后有什么遗漏?)
答案 0 :(得分:12)
我想知道为什么法令1不会产生错误,或者即使这是有效的
第一个语句是有效的,虽然它可能没有达到预期效果:此语句声明一个名为q
的函数,它返回一个指向{{1}类型对象的指针并输入一个函数,该函数不接受任何参数并返回类型为someclass
的对象。这称为Most Vexing Parse。
第二个语句无效:它试图将一个名为someclass
的指针声明为类型为q
的对象,并将此指针初始化为{{1}构造的对象的地址表达式。但请注意,someclass
是临时,并且获取临时地址是非法的。
答案 1 :(得分:3)
声明1实际上是函数的声明。此函数称为q
,并且指向不带参数的函数的指针并返回someclass
,并返回指向someclass
的指针。