有什么更好的表现?IF或正常循环的不定循环

What is better for performance? Infinitive loop with if or normal loop?

本文关键字:循环 常循环 更好 什么 IF      更新时间:2023-10-16

我经常看到游戏引擎在做:

for(;;) if(!frame()) break;

为什么他们只是写作:

while(frame());

,或者如果他们想使用:

for(;frame(););

有可能使用(;;(或(true(编译器可以优化更多,因为条件始终是正确的?!

这是课程的马。

在这种情况下,任何良好的优化编译器都会生成相同的代码。

老式的人在很大程度上依赖for(;;),因为大多数主要步骤编译器在"正常"设置警告时不会为此发出警告。我认为至少while(frame());有点清晰一些,尽管有些人不喜欢空的循环身体,而第一种方式的环形主体也不是空的。

来自cppreference for loops:

上面的语法[a for Loop]产生代码等效 to:

{
    init_statement
    while ( condition ) {
        statement
        iteration_expression ;
    } 
}

编译器不会读取cppReference,但他们也知道每个循环都可以写为wier loop,反之亦然。

您经常看到它的原因可能是惯例问题。我们只能猜测为什么选择它。让我推测...

考虑此循环:

for (int i=0;i < N; ++i);
{
    // do something
}

您能发现错误吗?良好的编译器警告说,但是我认为这种错误的潜力或在没有身体的情况下将循环混淆了这样的理由,足以避免无尸体的循环。

有可能使用(;;(或(true(编译器可以 优化更多是因为条件始终是正确的?!

否,在所有三个版本中,有效的条件都是相同的。