这是 C++ 中的有效函数:
int f()
{
if(false)
{
return 42;
}
}
以下定义导致 UB:
int x = f(); // return value used
问题: 下面的表达式语句会导致UB吗?
f();
非常欢迎从标准中引用。
这是 C++ 中的有效函数:
int f()
{
if(false)
{
return 42;
}
}
以下定义导致 UB:
int x = f(); // return value used
问题: 下面的表达式语句会导致UB吗?
f();
非常欢迎从标准中引用。
C++03 §6.6.3/2:
从函数的末尾流出相当于没有值的返回;这会导致值返回函数中的未定义行为。
所以这是一个函数本身的UB。
顺便说一句 gcc 给你一个很好的警告,指向这个 UB:
In function 'int f()':
Line 7: warning: control reaches end of non-void function
C++03,第 6.6.3/2 节:“从函数末尾流出等同于没有值的返回;这会导致返回值的函数出现未定义的行为。”
请注意,在 C 中情况并非如此。