在下面的代码中,为什么get_string_val()的赋值没有给出编译错误?看起来该函数正在返回一个右值。
当然,这是一个简单的例子,这可能是一个返回成员变量的成员函数。如果我打算返回std :: string&amp ;;这会导致错误。但是错误输入并返回了std :: string。
看起来“xxx”被分配给get_string_val()返回的临时变量?
std::string get_string_val()
{
std::string x;
return x;
}
int main()
{
get_string_val() = "xxx";
}
答案 0 :(得分:2)
这是因为std::string
有一个重载(自定义)赋值运算符。只要对象不是const限定的,就可以为rvalue std::string
调用此运算符。
如果get_string
将返回const std::string
,则会出现编译错误。
顺便说一下,内置类型的工作方式不同,内置类型没有为operator=
重载。 int get_int(); get_int() = 25;
将是编译错误。