这是一个有点理论的问题,但是虽然我对 std::move 有一些基本的了解,但我仍然不确定它是否为语言提供了一些理论上无法用超级智能编译器实现的附加功能。我知道这样的代码:
{
std::string s1="STL";
std::string s2(std::move(s1));
std::cout << s1 <<std::endl;
}
是一种新的语义行为,而不仅仅是性能糖。:D 但是我想没有人会在执行 std::move(x) 之后使用 var x。同样对于仅可移动数据(std::unique_ptr<>,std::thread),如果类型被声明为可移动,编译器不能自动执行旧变量的移动构造和清除吗?同样,这意味着将在程序员背后生成更多代码(例如,现在您可以计算 cpyctor 和 movector 调用,而使用 automagic std::moving 您无法做到这一点)。