7

这是 C++ 中的有效函数:

int f()
{
   if(false)
   {
      return 42;
   }
}

以下定义导致 UB:

int x = f(); // return value used

问题: 下面的表达式语句会导致UB吗?

f();

非常欢迎从标准中引用。

4

2 回答 2

9

C++03 §6.6.3/2:

从函数的末尾流出相当于没有值的返回;这会导致值返回函数中的未定义行为。

所以这是一个函数本身的UB。

顺便说一句 gcc 给你一个很好的警告,指向这个 UB:

In function 'int f()':
Line 7: warning: control reaches end of non-void function
于 2010-11-03T18:08:56.787 回答
3

C++03,第 6.6.3/2 节:“从函数末尾流出等同于没有值的返回;这会导致返回值的函数出现未定义的行为。”

请注意,在 C 中情况并非如此。

于 2010-11-03T18:12:10.330 回答