这是一个理论上的问题,但是虽然我对std :: move有一些基本的了解,但我还是不确定它是否为语言提供了一些额外的功能,而这些功能在理论上无法通过supersmart编译器实现.我知道代码如下:
{
  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你不能这样做).