C++11 为什么我可以给右值字符串赋值?

C++11 为什么我可以给右值字符串赋值?,c++11,c++-standard-library,C++11,C++ Standard Library,正如我所预料的,这段代码不会编译,因为move给您提供了右值,而您不能为右值分配任何内容: int a, b; move(a) = b; 问题是为什么要编译下面的代码 string a, b; move(a) = b; 原因可能有点令人惊讶。第一种形式是内置赋值,这在右值引用上确实不起作用 第二条语句实际上是move(a)。operator=(b)。这是一个函数调用。您可以对右值调用函数,即使这些函数的名称有些不寻常

正如我所预料的,这段代码不会编译,因为move给您提供了右值,而您不能为右值分配任何内容:

int a, b;
move(a) = b;
问题是为什么要编译下面的代码

string a, b;
move(a) = b;

原因可能有点令人惊讶。第一种形式是内置赋值,这在右值引用上确实不起作用

第二条语句实际上是
move(a)。operator=(b)
。这是一个函数调用。您可以对右值调用函数,即使这些函数的名称有些不寻常