在下面的代码片段中,为什么第二行的
我的理解是表达式
2 + 3 = 5
语句会报错,但是接下来的字符串拼接赋值语句却能够成功编译?#include <string>
int main() {
2 + 3 = 5; // Error: lvalue required as left operand of assignment
std::string("2") + std::string("3") = std::string("5"); // Compiles successfully. why?
return 0;
}
我的理解是表达式
std::string("2") + std::string("3") = std::string("5")
的左侧将产生一个临时变量,即rvalue
。这意味着我正在向rvalue
赋值——就像2 + 3 = 5
一样。因此,它也应该会给出需要lvalue作为赋值操作的左操作数
的错误提示。但事实并非如此。
std::string("3") = std::string("5");
仍然可以编译通过。 - Richard Crittenoperator=
的rvalue版本,例如basic_string&basic_string :: operator =(CharT ch)&& = delete;
对于任何容器都没有执行。因此,我想这是一个有意的决定。 - Richard Critten