初始化指针

Raj*_*war 5 c++

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

// statement 1:
someclass* q(someclass());
Run Code Online (Sandbox Code Playgroud)

我理解这句话是否是这样的

// statement 2:
someclass* q(&someclass());
Run Code Online (Sandbox Code Playgroud)

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

And*_*owl 12

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

第一个语句是有效的,虽然它可能没有达到你的期望:这个语句声明一个名为的函数q,它返回一个指向类型对象的指针,someclass并输入一个函数,该函数又不接受任何参数并返回一个类型的对象someclass.这被称为令人烦恼的解析.

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

  • 因此,我建议使用`=`运算符而不是`()`进行初始化.例如`someclass*q = someclass();`会像你期望的那样创建一个错误. (2认同)
  • 第二个陈述无效.你*不能*取一个临时的地址. (2认同)