当`a`和`b`都是'X`类时,`a = b()`是什么意思?

Mah*_*koe 0 c++ copy-constructor

我正在阅读一篇关于rvalue-references文章,但我对下面的摘录感到困惑:

X foo();
X x;
// perhaps use x in various ways
x = foo();
Run Code Online (Sandbox Code Playgroud)

这里,X是一些用户定义的类型.

我知道X foo();会调用X的构造函数,我很确定X x;不会.

但是,这条线x = foo();意味着什么?是否有一个名为?的构造函数?什么会x = foo;做?

尽我所能,我无法弄清楚要查找的正确单词以找出此代码的含义.

Ben*_*ley 7

我知道X foo();会调用X的构造函数

不,它不会.它将声明(但不定义)一个名为foo的函数,该函数不带参数,并返回一个X.

而且我很确定X x;不会.

是的,如果有的话.通过上述对您理解的更正,您的问题的答案现在应该是明显的,但是:

但是,这条线x = foo();意味着什么?

这意味着调用函数foo,并将结果存储在x中.

  • @Mahkoe:你可能想读一下人们称之为[C++的"最令人烦恼的解析"](https://en.wikipedia.org/wiki/Most_vexing_parse).对"c ++最令人烦恼的解析"进行一些搜索可能会很有成效. (5认同)
  • *"如果我想声明一个X类型的对象并且不产生对构造函数的调用,那该怎么办"* - 你不能.但是,如果可以的话,这只是一个内存分配,当然,有多种方法可以在C++中分配内存. (3认同)