为什么我可以为 rValue 字符串赋值?

Why can I assign something to rValue string?

如我所料,这段代码无法编译,因为 move 给了你 rValue 而你不能给 rValue 赋值:

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

问题是为什么下面的代码可以编译?

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

原因可能有点意外。第一种形式是内置赋值,它确实不适用于右值引用。

第二个说法其实是move(a).operator=(b)。那是一个函数调用。您可以在右值上调用函数,即使这些函数的名称有些不寻常。