在循环性能内部评估布尔条件

时间:2016-01-27 18:08:16

标签: c++ performance for-loop

我有两个循环。我不明白为什么第一个比第二个跑得快。你能尽可能简单地解释一下吗?

首先:

for (int x1=0;x1<1000;x1++){
   for(int x2=0;x2<1000;x2++){
      if(x1<500){
         a[x2+x1*1000]=100;
      }
   }
}

第二

bool cond;
for (int x1=0; x1<1000; x1++) {
    cond = x1<500;
    for(int x2=0; x2<1000; x2++){
        if(cond){
            a[x2+x1*1000] = 100;
        }
    }
}

(我简化了我的代码)

1 个答案:

答案 0 :(得分:0)

最简单的答案是当你使用

if(x1<500){
      a[x2+x1*1000]=100;
          }

你实际上使用的是直接方法,在这种方法中,比较值并完成工作,但是当你使用

if(cond) { 
  a[x2+x1*1000] = 100;
         }

然后它首先计算“cond”的答案,然后应用if条件,更具体地说,你可以把它当作cond是一个函数调用,并且if(x1 <500)是main()中的简单比较。 希望你得到你的答案,如果你想知道关于这个主题的任何其他事情告诉我:)