分配给函数返回的值(rvalue?)不会产生编译错误

时间:2018-05-18 19:38:41

标签: c++

在下面的代码中,为什么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";
}

1 个答案:

答案 0 :(得分:2)

这是因为std::string有一个重载(自定义)赋值运算符。只要对象不是const限定的,就可以为rvalue std::string调用此运算符。

如果get_string将返回const std::string,则会出现编译错误。

顺便说一下,内置类型的工作方式不同,内置类型没有为operator=重载。 int get_int(); get_int() = 25;将是编译错误。