这是无限递归UB吗?

Lig*_*ica 24 c++ recursion undefined-behavior c++11

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

int main() {
   while (true) {}
}
Run Code Online (Sandbox Code Playgroud)

UB也是以下吗?

void foo() {
   foo();
}

int main() {
   foo();
}
Run Code Online (Sandbox Code Playgroud)

两个计划的标准引文都是理想的.

Joh*_*itb 20

它是UB,因为它的循环不是措辞,而是(1.10p24):

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

  • 终止,
  • 调用库I/O函数,
  • 访问或修改易失性对象,或
  • 执行同步操作或原子操作.

这适用于两者,而不是其中一个C++ 0x草案中较旧的公式.(请参阅此问题进行讨论).

请注意,忽略这一点,如果递归超过嵌套递归函数调用数的实现限制,则很容易定义该行为.情况一直如此.