c++ - 分配给函数返回的值(右值?)不会产生编译错误
问题描述
在下面的代码中,为什么对 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";
}
解决方案
那是因为std::string
有一个重载(自定义)赋值运算符。rvalue std::string
只要对象不是 const 限定的,就可以为 调用此运算符。
如果您get_string
返回const std::string
.
operator=
顺便说一句,对于没有重载的内置类型,事情的工作方式不同。int get_int(); get_int() = 25;
将是一个编译错误。
推荐阅读
- regex - 如何在 dirsync python 模块中包含选项?
- python - Pymongo 批量删除
- logging - 如何配置 ibm cloud kube 转发日志 - 从 kube 转发日志的最佳方式
- luxon - 使用 luxon 库显示相对于给定时间的时间
- css - CSS 动画 (@keyframes) 正在加热 CPU
- c++ - 在 VS 2017 社区上进行调试后,控制台上会显示更多文本
- html - Cognos Report Studio 列表提示 HTML 项
- python - 剪刀石头布 HMAC(SHA-3 或 SHA-2)加密
- crystal-reports - Crystal Reports 日期和字符串的最大值
- python - Python将每个字符串除以字符串的总长度