我一直在想一个简单的问题:
当我进行如下循环时:
for (int i = 0; i < myVector.size() ; ++i) {
// my loop
}
每次循环都要检查条件 i < myVector.size()
,我应该在循环之前将数组的大小存储在变量中,以避免每次迭代调用 size() 函数吗?还是编译器足够聪明,可以自己处理?
mySize = myVector.size();
for (int i = 0; i < mySize ; ++i) {
// my loop
}
我想把问题扩展到更复杂的条件,例如 i < myVector.front()/myVector.size()
编辑:我在循环中没有使用myVector,它只是用来给出结束条件。那么更复杂的条件怎么办?
myVector.front() / myVector.size()
是一个常量表达式(假设你在循环内部不修改向量)。无论如何,这是一个优化问题,结果可能会因编译器版本和优化模式而异。因此,我不会告诉你是否应该在循环之前计算终止值;只需将代码编译为汇编源代码,看看编译器是否在每次迭代中产生完整的计算即可。如果是这样,那么自己进行优化可能是有意义的。 - CiaPan