这是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中并非如此。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top