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
相关产品推荐
相关产品推荐

