我知道当把一个对象按值传递给函数时,如果有移动构造函数(假设没有复制省略),那么移动构造函数总是会被调用。那么如果按值返回一个对象呢?
例如,假设我们有一个带有移动构造函数的类Foo,我们有一个函数返回一个Foo对象。
例如,假设我们有一个带有移动构造函数的类Foo,我们有一个函数返回一个Foo对象。
Foo g() {
Foo f;
// do something with f
return f;
}
如果我们假设没有返回值优化(RVO),那么移动构造函数是否保证被调用?
更新:我想我没有清楚地表达我的意图。我只是想知道在最坏的情况下,对象被移动而不是复制。无论是RVO还是NRVO发生,我都很满意。并且我也应该说,移动构造函数和移动赋值函数没有被删除,并且已经正确实现。
f
移入函数的说法:“return do_something(f);”。 - GManNickG