假设我有一个名为Foo的类,它具有合适的移动构造函数/赋值运算符。鉴于以下伪代码:C++ 11是否使用移动语义进行复制到分配优化?
Foo some_func(Foo var) {
<update var>
return var;
}
int main() {
Foo var;
var = some_func(var);
}
请问C++ 11时,通过向VAR some_func,并再次重新分配给无功,因为变种的原始值将被销毁反正自动使用移动语义?我想认为这是一个安全的优化,它可以让你编写与传递引用/指针一样快的纯函数。如果它不能这样做,为什么不呢?我知道它可以强制std :: move,但它会很酷,如果它是自动的。
这种优化 - 将局部变量'var'移动到函数参数 - 如果它具有可观察的副作用,则是非法的。例如,如果移动构造'some_func'或'some_func'本身的参数本身,则'main'中的局部变量可能会被修改/处于无效状态。 – dyp 2014-12-02 18:22:39
这是一个很好的答案,尽管它似乎过于谨慎。我很难想出一个可能会抛出的非人为的移动构造函数。 – 2014-12-02 18:34:33
@gct即使移动构造函数有时也需要内存分配,并且内存分配总是可以抛出。 – hvd 2014-12-02 18:55:27