初始化指针

时间:2013-03-15 22:57:00

标签: c++

我目前对以下语句感到困惑 - 虽然这个语句在编译期间会产生错误,但事实并非如此。

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

我理解这句话是否像这样

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

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

2 个答案:

答案 0 :(得分:12)

  

我想知道为什么法令1不会产生错误,或者即使这是有效的

第一个语句是有效的,虽然它可能没有达到预期效果:此语句声明一个名为q函数,它返回一个指向{{1}类型对象的指针并输入一个函数,该函数不接受任何参数并返回类型为someclass的对象。这称为Most Vexing Parse

第二个语句无效:它试图将一个名为someclass的指针声明为类型为q的对象,并将此指针初始化为{{1}构造的对象的地址表达式。但请注意,someclass临时,并且获取临时地址是非法的。

答案 1 :(得分:3)

声明1实际上是函数的声明。此函数称为q,并且指向不带参数的函数的指针并返回someclass,并返回指向someclass的指针。

请参阅Most Vexing Parse