这些规则涵盖“假设”规则:
但是让我们采用如下程序:
while (1) { }
// or
for (;;) { }
事实是没有对象或对函数的调用,因此没有副作用,因此没有“执行环境状态的改变”。是什么导致编译器无法将此代码编译为xorl %eax, %eax
retq
这是不确定的吗?无限循环本质上是“这里是一个标签,一遍又一遍跳到它”,并将一直持续到计算机关闭为止。该代码没有做任何有趣的事情,没有计算,没有I / O输出,等等。在内核代码中,无限循环变得很有趣。但是在用户空间代码中,无限循环通常是程序编写错误的标志。那么我的逻辑有何缺陷?
最佳答案
由于[intro.multithread] / p27(引用N4140;这是N3337中的p24),因此可以:
空无限循环在C++ 11和更高版本中是UB。
关于c++ - 为什么不能消除无限循环?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29268092/