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

C++中引用自初始化是否为未定义行为及赋值后行为探讨

关于引用自初始化的C++未定义行为问题

我了解到对未初始化变量进行求值属于未定义行为(Undefined Behavior,UB),例如int i = i;就是典型的未定义行为案例。但我有个疑问:使用引用变量对自身进行初始化是否也属于未定义行为?具体而言,根据C++标准,int &ref = ref;这种写法属于UB吗?它是良构代码、非法代码,还是会触发未定义行为?

int &ref = ref; // 这段代码是良构、非法还是未定义行为?

我测试发现所有编译器都能编译上述代码(Clang会给出警告),想知道这是因为它属于未定义行为因此允许编译器做出任意处理,还是该程序本身就是良构的?


此外,如果为ref赋值,程序行为是否会与之前的情况有所不同?

int &ref = ref;

int main()
{
    ref = 1; // 这会改变程序的行为吗?
}

我实际测试发现第二个代码片段会触发段错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:32:48