【发布时间】:2020-02-28 18:08:18
【问题描述】:
在下面的代码 sn-p 中,为什么行 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 required as left operand of assignment 错误。但事实并非如此。
【问题讨论】:
-
简化
std::string("3") = std::string("5");仍然可以编译 -
刚刚检查了大多数标准容器,其中没有一个删除了
operator=的右值版本,例如basic_string& basic_string::operator=( CharT ch ) && = delete;不适用于任何容器。所以我想这是一个有意识的决定。
标签: c++ assignment-operator rvalue