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

C++中初始化时传递未初始化变量给函数是否属于未定义行为?

结论:两处语句均属于未定义行为(UB)

这两行初始化代码确实会触发C++中的未定义行为,具体原因如下:

  • 对于 int x = num_convert("55", x);:函数调用时需要把x的值以值传递的方式传入num_convert,但此时x还未完成初始化。变量的初始化要等整个赋值表达式执行完毕后才完成,而函数参数的求值发生在函数调用之前,这一步已经读取了未初始化的x的不确定值。
  • 对于 long y = num_convert("5555555555", y);:逻辑和上述完全一致,传递未初始化的y作为参数时,同样会读取其不确定的值。

需要注意的是,哪怕num_convert函数根本没用到第二个参数的值也不影响——只要发生了读取未初始化的内置类型局部变量的值这个操作,就已经违反C++标准,构成未定义行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:55:30