首页 > 解决方案 > 分配给函数返回的值(右值?)不会产生编译错误

问题描述

在下面的代码中,为什么对 get_string_val() 的赋值没有给出编译错误?看起来该函数正在返回一个右值。

当然,这是一个简单的例子,这可能是一个返回成员变量的成员函数。如果我打算返回 std::string& 但输入错误并返回了 std::string,这可能会导致错误。

看起来“xxx”被分配给 get_string_val() 返回的临时变量?

std::string get_string_val()
{
    std::string x;
    return x;
}

int main()
{

    get_string_val() = "xxx";
}

标签: c++

解决方案


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

如果您get_string返回const std::string.

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


推荐阅读