C++编码器通常是显式移动还是只依靠编译器来做?

use*_*453 7 c++ move-semantics c++11

我们在某些功能中有这个:

BigClass big;
// prepare big somehow
OtherClass foo(std::move(big), maybe, other, params);
// know that we won't be using "big" after this.
Run Code Online (Sandbox Code Playgroud)

这些天大多数C++程序员是否真的会采取行动来保证此举?

Dav*_*eas 10

在您的特定代码中,您可以直接移动,也可以根本不移动.编译器永远不会移出左值(不是eXpiring).

  • @ user2015453:事情可能比这复杂得多.可能是函数调用之后的其他任何地方都没有使用`big`,但是还有一些其他别名(指针/引用)...... xvalue的移动是*safe*,意思是任何对象的使用通过别名将是UB,但在这种情况下,对象仍然存在,直到范围结束,而不仅仅是这一行.语言必须保守,当用户可以根据需要手动请求移动时更是如此. (2认同)