为什么继续执行语句不执行?

时间:2019-08-03 04:10:38

标签: c++ break continue

为什么执行break语句但不执行continue语句?

vector<int>val {2,3,4,-1,5,6,-1,56,234,-99,26,35,12,3,4};

for (auto name: val) {

    cout << name << endl;
    if (name == -1)
        continue;
    else if (name == -99)
        break;
}

为什么它不跳过代码中上面指出的-1(不执行继续语句),却同时执行break函数。 它会在控制台上显示以下数字:

2
3
4
-1
5
6
-1
56
234
-99

4 个答案:

答案 0 :(得分:3)

std :: cout命令的位置错误,如果仅所有条件均错误,则必须显示。如果满足条件name == -1,则continue关键字会指示在增加循环迭代器后立即返回到for循环,因此在这种情况下将不会调用cout命令行。

for (auto name : val) {     
    if (name == -1) 
        continue;
    else if (name == -99) 
        break;
    cout << name << endl;
}

答案 1 :(得分:0)

coninue语句未执行,因为它是for循环中的最后一条语句,并且没有任何意义,因此优化程序将其删除,从而不会生成多余的jmp(或相关)操作。

答案 2 :(得分:-1)

在这种情况下,只有在通过IF ELSE条件后,才应打印这些值。您甚至在检查它们是-1还是-99之前就在打印它们,因此从技术上讲,它将打印该矢量中的所有内容,直到找到-99。

答案 3 :(得分:-2)

第一次执行将逐步进行。

for循环一个接一个地迭代,并将每个元素与给定条件进行比较。

如果name == -1为真,则反复比较continue 否则,如果name == -99,则break将采取行动。然后,您必须打印不满意的值。

因此您的代码将按以下方式工作。

for (auto name : val) {
    if (name == -1)
        continue;
    else if (name == -99)
        break;
    cout << name << endl;
}