假设有一个带有移动构造函数的类 A
,考虑以下情况:
A get()
{
A a;
return std::move( a );
}
// later in the code
A aa = get();
在这里,显式调用 std::move
强制调用 A
的移动构造函数,因此可能会抑制在调用 get()
时的返回值优化。因此,更好的 get()
实现应该是这样的:
A get()
{
A a;
return a;
}
但是返回值优化不是C++11标准的一部分,所以如果编译器由于某种原因决定在调用get()
时不执行返回值优化,在这种情况下会在get()
中返回A
的复制构造函数对吗?
那么第一个get()
实现不是更可取吗?
std::move
。如果可访问,则会通过 12.8/32 调用 A 的移动构造函数。 - MWidA
,但函数的返回类型应该是B
,而且B
有一个移动构造函数需要一个A
作为参数,那么如果你想使用移动语义,就必须显式地写出move
。 - MWid