这是无限的recursionUB吗?

在C ++ 11中,作为一个没有副作用的死循环,下面的程序是UB:

int main() { while (true) {} } 

以下也是UB吗?

 void foo() { foo(); } int main() { foo(); } 

从这两个scheme的标准引用将是理想的。

这是UB,因为它没有循环的措辞,但是(1.10p24):

实现可能会假定任何线程最终都将执行以下操作之一:

  • 终止,
  • 拨打一个库的I / Ofunction,
  • 访问或修改易失性对象,或
  • 执行同步操作或primefaces操作。

这适用于两者,而不是C ++ 0x草案之一中较老的公式。 (请参阅这个问题的讨论)。

请注意,忽视这一点,如果recursion超出了嵌套recursion函数调用次数的实现限制,那么行为可能很容易被定义。 情况一直如此。

我不认为标准说行为是不确定的,只是说没有副作用的循环可能会被认为最终终止。

所以:

 int main() { while (true) {} } 

可能会终止或永久循环。

 void foo() { foo(); } int main() { foo(); } 

也可能会终止,永远循环,或可能用完堆栈空间(如果编译器不实现尾recursion)。

我不认为任何事情都没有权利做任何事情,所以我不认为这个行为是完全“未定义的”。