第3.7章: continue

English

continue 语句

continue 语句跳过循环体余下的部分,直接跳到 下一次迭代。


continue;

它不会退出循环。 它只跳过当前迭代中剩余的语句。

while 循环中的 continue

这个循环只打印偶数。


::std::uint_least32_t i{};

while (i != 10) {
    if (i % 2 == 1) {
        ++i;
        continue;   // skip odd numbers
    }
    println("even: ", i);
    ++i;
}

for 循环中的 continue

continue 会直接跳到循环的步进表达式。


for (::std::uint_least32_t i{}; i != 10; ++i) {
    if (i % 3 != 0) {
        continue;   // skip non-multiples of 3
    }
    println("multiple of 3: ", i);
}

死循环中的 continue

在死循环中,continue 只是重新开始循环。


::std::uint_least32_t i{};

for (;;) {
    ++i;
    if (i < 5) {
        continue;   // restart the loop
    }
    println("i reached 5");
    break;          // stop the loop
}

带初始化语句的循环中的 continue

即使循环使用了初始化语句,continue 也照常工作。


for (auto i = 0; i < 10; ++i) {
    if (i == 4) {
        continue;
    }
    println("i=", i);
}

嵌套循环

continue 只影响最内层循环。


for (::std::uint_least32_t i{}; i != 3; ++i) {
    for (::std::uint_least32_t j{}; j != 3; ++j) {
        if (j == 1) {
            continue;   // skips only the inner loop's iteration
        }
        println("i=", i, ", j=", j);
    }
}

伪图:continue 跳向何处


          ┌───────────────┐
          │     loop       │
          │    begins      │
          └───────┬───────┘
                  │
                  ▼
          ┌───────────────┐
          │     cond       │─── false ───▶ loop ends
          └───────┬───────┘
                  │ true
                  ▼
          ┌───────────────┐
          │     body       │
          └───────┬───────┘
                  │
                  ├──▶ if (continue) ───────▶ step ─────▶ cond
                  │
                  ▼
          ┌───────────────┐
          │      step      │
          └───────┬───────┘
                  │
                  └─────────────── back to cond
      

要点