这是无限的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)。
我不认为任何事情都没有权利做任何事情,所以我不认为这个行为是完全“未定义的”。