循环检查约定

时间:2017-03-11 00:53:43

标签: c++ loops convention

如果我经历一个循环,说迭代一个向量,而我不想对向量中的某个项做一个动作,我可以用两种方式来做:

这是我喜欢使用的那个:

vector<int> vec;
void loopFunction(int toIgnore) {
    for (size_t index = 0; index < vec.size(); index++) {
        if (vec[index] == toIgnore) continue;
        // do stuff
    }
}

这是我看到大多数人使用的那个:

vector<int> vec;
void loopFunction(int toIgnore) {
    for (size_t index = 0; index < vec.size(); index++) {
        if (vec[index] != toIgnore) {
            // do stuff
        }
    }
}

我知道在最终结果中绝对没有区别。但是,由于第二种方式打开了一个新的执行范围,引擎盖下是否存在任何差异?这两个中的任何一个都优先于另一个吗?

由于

1 个答案:

答案 0 :(得分:2)

正如我的评论中所述,在个人层面上,我更喜欢使用continue的第一个实现,以防止不必要的代码嵌套和范围创建。

除了将要实现的常规代码之外,每个的唯一性能开销是评估if-statement中的表达式。由于它们都包含要评估的表达式,因此它们具有相同的性能。

如果您考虑如何编译它,对于C / C ++,它直接进入汇编代码。在该级别上,无论您如何嵌套代码,它都会编译为简单的jmpcmp命令。因此,无论实现如何,在编译时,您都会拥有相同的汇编代码。

无论你怎样看待它,这是一个微观微观优化,如果有的话!做你喜欢的代码格式和样式。