像这样的代码经常出现在 r-value 参考文章中:
void g(X);
void f()
{
X b;
g(b); // still need the value of b
…
g( std::move(b) ); // all done with b now; grant permission to move
}
编译器是否可以自动生成这种优化,即检测一个左值无论如何都会被破坏并且可以被移除,或者这是否违反标准,假设编译器不知道任何关于如何是的为 X 类实现的移动、复制或破坏?
如果允许这样的优化,它是由一些编译器在实践中执行的吗?