最新的 C++ 标准的哪些条款说这个循环是未定义的行为? [重复]

问题描述 投票:0回答:0

上下文。以下程序是由于无副作用的无限循环导致的 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";
}
c++ language-lawyer infinite-loop standards compiler-optimization
© www.soinside.com 2019 - 2024. All rights reserved.