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

为何含自初始化B引用的代码可编译?该引用的初始化指向是什么?

代码编译原因与引用指向分析

为什么能编译

C语法没禁止在成员初始化时引用正在初始化的成员本身。编译器只做语法层面的检查,这种写法符合语法规则,所以能通过编译,但这属于未定义行为——C标准不保障这段代码的运行结果,只是允许你写出这样的代码而已。

引用实际指向什么

B& b = b;是用成员b自己来初始化这个引用,但问题是,初始化发生时,b作为引用成员还没完成初始化。引用本质是其他对象的别名,这里根本没有合法的B对象可以绑定,最终这个引用会绑定到一个无效的内存地址(或者说绑定到它自身的存储位置,但这没有任何实际意义)。之后要是尝试用这个引用访问B的成员,比如a.b.a,结果完全不可控,可能崩溃、输出垃圾值,或者出现其他离谱的情况。

说白了,这就是个语法合法但逻辑完全错误的写法,引用根本没绑定到任何有效的B实例上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:54:22