continue在do while中跳转到while条件判断处,而非do开头;因do while先执行后判断,continue语义是结束本轮、进入入口检查,而其入口检查即while表达式。

do while 中 continue 跳转到哪里?
continue 在 do while 循环里会直接跳过本轮剩余代码,**执行循环条件判断(即 while 后的表达式)**,然后决定是否进入下一轮循环体。它不会跳回 do 关键字之后,也不会跳过条件检查。
为什么不是跳回 do 开头?
因为 do while 的结构是「先执行、后判断」,continue 的语义始终是「结束本轮迭代,进入下一轮的「入口检查」」。对 do while 来说,这个「入口检查」就是 while 表达式——它才是控制是否重跑循环体的唯一开关。
-
for和while中continue跳到「条件判断」,do while也一样,只是它的条件写在末尾 - 不存在「跳回
do」这种行为;C++ 标准里没有这种跳转目标 - 如果误以为会跳回
do,可能写出无限循环(比如把更新逻辑放在do块开头,又在中间continue)
一个容易出错的典型例子
下面这段代码会无限打印 0:
int i = 0;
do {
if (i == 0) continue; // 跳过 i++,永远卡在 i == 0
i++;
} while (i < 5);
问题出在:条件判断前的更新逻辑(i++)被 continue 绕过了,而 while (i 永远为真(因为 <code>i 始终是 0)。正确写法应确保所有影响循环变量的代码都在 continue 之后,或提前处理好状态。
立即学习“C++免费学习笔记(深入)”;
和 break 的关键区别
break 会直接跳出整个 do while 循环,控制流落到循环之后的第一条语句;而 continue 一定回到 while 表达式求值。这点在嵌套循环中尤其重要:
- 内层
do while中的continue只影响该层循环 - 如果想跳过外层逻辑,不能靠内层
continue,得用标志位或goto(谨慎)或重构 - 编译器不会报错,但逻辑错位时调试起来容易漏掉
continue这个隐性跳转点
真正麻烦的不是语法本身,而是人脑容易把「do while」的结构直觉当成「先判断再执行」,从而误判 continue 的落点。盯住 while 那行表达式,就对了。


















