上下文。以下程序是由于无副作用的无限循环导致的 C++ 中未定义行为的示例。 (如果我们使用
clang++
编译这个程序并打开优化级别 1(使用 clang++ -O1 -o program program.cpp
),它将生成有效的代码,使 fermat
过程返回 true
。)
问题。最新 C++ 标准的哪一部分允许编译器执行此操作?
#include <iostream>
bool fermat()
{
const int max_value = 1000;
// Endless loop with no side effects is UB
for (int a = 1, b = 1, c = 1; true; )
{
if (((a * a * a) == ((b * b * b) + (c * c * c))))
return true; // disproved :)
a++;
if (a > max_value)
{
a = 1;
b++;
}
if (b > max_value)
{
b = 1;
c++;
}
if (c > max_value)
c = 1;
}
return false; // not disproved
}
int main()
{
std::cout << "Fermat's Last Theorem ";
fermat()
? std::cout << "has been disproved!\n"
: std::cout << "has not been disproved.\n";
}