这是C ++中的有效函数:
int f()
{
if(false)
{
return 42;
}
}
以下定义会导致UB:
int x = f(); //return value used
问题: 以下表达式语句是否会导致UB?
f();
标准的引用将非常受欢迎。感谢
警告: 关于文体学的评论无关紧要:)
答案 0 :(得分:8)
C ++03§6.6.3/ 2:
离开函数末尾相当于没有值的返回;这会导致值返回函数中的未定义行为。
所以这是函数本身的UB。
BTW gcc给你一个指向这个UB的好警告:
In function 'int f()':
Line 7: warning: control reaches end of non-void function
答案 1 :(得分:3)
C ++ 03,§6.6.3/ 2:“在函数末尾流动等效于没有值的返回;这会导致值返回函数中出现未定义的行为。”
请注意,在C中也不是这样。