还在继续吗?

Joe*_*oel 5 c++ continue compiler-optimization

在以下两个代码片段中,根据编译或运行的速度,实际上是否有任何不同?

for (int i = 0; i < 50; i++)
{
    if (i % 3 == 0)
        continue;

    printf("Yay");
}
Run Code Online (Sandbox Code Playgroud)

for (int i = 0; i < 50; i++)
{
    if (i % 3 != 0)
        printf("Yay");
}
Run Code Online (Sandbox Code Playgroud)

就个人而言,在存在多于print语句的情况下,我一直在使用第一种方法来减少包含代码的缩进量.想知道一段时间,所以发现它的时间我问它是否实际上有除了视觉效果.

回复Alf(我无法让代码在评论中工作......)

对我的用法更准确的是"handleObjectMovement"函数的行,其中包括

for each object
    if object position is static
        continue

    deal with velocity and jazz
Run Code Online (Sandbox Code Playgroud)

和....相比

for each object
    if object position is not static
        deal with velocity and jazz
Run Code Online (Sandbox Code Playgroud)

因此我没有使用回报.基本上"如果它与此迭代无关,请继续"

Mik*_*our 8

行为是相同的,因此除非编译器执行愚蠢的操作(或除非您禁用优化),否则运行时速度应该相同.

无法确定编译速度是否存在差异,因为它取决于编译器如何解析,分析和翻译两种变体的细节.

如果速度很重要,请测量它.