第3.7章: continue
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
要点
- continue 跳过循环体余下的部分:它不会退出循环。
- continue 跳到下一次迭代:在
for中,它跳到步进表达式。 - 嵌套循环:只有最内层循环受影响。
- 死循环:
continue只是重新开始循环。 - 清晰性:有意识地使用
continue;不要把它深埋在复杂逻辑里。