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

函数声明与取地址运算符:函数func的返回值究竟是什么?

函数func的返回值到底是什么?

嘿,这个问题问得很到位!咱们先把代码摆出来看清楚:

int a = 10; 
int &func() { return a; } 
int main() { 
    int b = func(); 
    std::cout << b; // 输出10
}

首先明确:func的返回值是对全局变量a的左值引用——换句话说,它返回的不是a的数值副本,而是a本身的"别名"或者说"绑定关系"。

接下来拆解main里的行为:

  • 当你写int b = func();时,编译器会先让func()返回指向a的引用,然后触发拷贝初始化:把这个引用指向的a的当前值(也就是10)复制一份,赋值给新的变量b。所以b是一个独立于a的变量,值为10,这就是输出10的原因。

这里有个关键的区分点:
如果把main里的代码改成int &b = func();,那b就会成为a的另一个别名——此时修改b的值,a的值也会跟着变,因为它们本质上是同一个内存地址的不同名字。

另外要提一句:因为a是全局变量,它的生命周期覆盖整个程序运行过程,所以返回它的引用是安全的,不会出现"悬垂引用"(引用指向已经销毁的对象)的问题。要是func返回的是局部变量的引用,那程序就会有未定义行为了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:09:43