我有以下代码:
SomeClass func()
{
SomeClass someObject;
someObject.mutate("some text");
return someObject;
}
int main()
{
func();
return 0;
}
SomeClass 仅在构造函数中记录某些内容,因此我可以验证正在调用的内容。
通过发布版本,我有以下输出:
default constructor
由于复制/移动省略,这是有道理的。我想关闭返回值优化。使用调试版本,我有以下输出:
default constructor
move constructor
我认为我可以安全地假设 NRVO si 关闭。我真的很想知道为什么要调用移动构造函数而不是复制构造函数。我的(可能是错误的)理解是,由于 func 中的 someObject 是一个左值,因此应该使用复制构造函数而不是移动构造函数来初始化返回对象。
我错过了什么?有人可以指出标准中阐明该案例的段落吗?