2016-12-01 125 views
1

我只是想知道写一些代码时弹出到脑海里的东西。if/else-if语句如何处理?

for (int i = 0; i < num_bits; i++) { 
     if (bits.at(i) == 0) { 

     } 

    else if (bits.at(i) == 1) { 

    } 
} 

在此代码,bits是一个字符串,num_bits是字符串的长度。

在这种情况下,程序是否会在if和`else if`处运行string.at(i),或者它会运行一次,然后将其存储在某处并在两个语句中使用它?我不知道这个问题是否足够清楚,但谢谢任何答案。

回答

1

想一想。引擎如何知道每个对该函数的调用都会产生相同的结果?

+0

谢谢,那是我最初的想法。你认为将字符串转换为char数组或类似的东西会更有效率,而不是始终调用函数吗? – user2851949

+0

首先将值存储到变量并与变量进行比较,您只需调用一次该方法。或者你可以在-O1或更高版本上使用位[i] – Hampus

+1

g ++,它足够聪明,可以为你创建临时文件。请注意,程序集与[(])(https://godbolt.org/g/XVleS5)和[without](https://godbolt.org/g/ecH5gI)是相同的临时表。 –

0

无论何时调用它,它都会运行该函数,所以对于此示例2次。您可以在for循环的顶部声明它,或者如果您需要执行更多繁重的操作,可以使用foreach。