You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中引用指向函数返回值是否可行?相关代码疑问解析

C++返回值与引用绑定问题解析

先看给出的类定义与调用代码:

class AA {
private:
    string s = "asd";
public:
    string func1() {
        return s;
    }
    string& func2() {
        return s;
    }
};

调用代码:

AA a;
auto &r1 = a.func1();
auto &r2 = a.func2();

关于r1的指向

r1不会指向AA::s,它绑定的是func1()返回的临时匿名对象。

这里要说明:按照C++标准,非const左值引用不能绑定到临时对象,你测试能运行是因为部分编译器(比如GCC)提供了非标准扩展。标准的合法写法应该是const auto& r1 = a.func1();,这种情况下临时对象的生命周期会被延长至引用的生命周期结束。

关于RVO的疑问

不管是否触发RVO(返回值优化),r1都不会指向AA::s。RVO的作用是避免临时对象的拷贝操作,直接把要返回的s的拷贝构造在调用方的内存空间中,但它本质上还是一个独立的对象,和原AA::s是两个完全不同的实例。哪怕RVO生效,修改r1也不会影响AA::s,反之亦然。

而r2确实直接绑定到AA::s本身,修改r2会直接改变a的成员变量s,这部分你的理解是正确的。


内容的提问来源于stack exchange,提问作者f1msch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:40:07