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

返回整数字面量的引用是否为未定义行为(UB)?相关代码疑问

返回字面量引用的未定义行为分析
const int& foo() {
  return 42;
}

int main() {
  foo();
}

问题解答:

  • 这段代码确实存在未定义行为(UB)。
  • 未定义行为在foo()返回引用的瞬间就已经触发,不需要后续访问该引用才会导致UB。

具体原因:
整数字面量42是一个临时对象,当foo()返回绑定到它的引用时,这个临时对象的生命周期不会被延长(C标准里只有当引用直接用于初始化作用域之外的变量时,才会延长临时对象的生命周期,函数返回引用的场景不适用这个规则)。函数执行完毕后,临时对象42会被销毁,返回的引用就变成了指向已销毁对象的悬垂引用。根据C标准,返回悬垂引用本身就属于未定义行为,哪怕main()里只是调用foo()而没有使用返回值,这种行为依然是UB——编译器可以对此做任何优化或产生不可预料的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:25:25