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
<p>问题出在:条件判断前的更新逻辑(<code>i++</code>)被 <code>continue</code> 绕过了,而 <code>while (i 永远为真(因为 <code>i</code> 始终是 0)。正确写法应确保所有影响循环变量的代码都在 <code>continue</code> 之后,或提前处理好状态。</code></p>
<h3>和 <code>break</code> 的关键区别</h3>
<p><code>break</code> 会直接跳出整个 <code>do while</code> 循环,控制流落到循环之后的第一条语句;而 <code>continue</code> 一定回到 <code>while</code> 表达式求值。这点在嵌套循环中尤其重要:</p>
- 内层
do while中的continue只影响该层循环 - 如果想跳过外层逻辑,不能靠内层
continue,得用标志位或goto(谨慎)或重构 - 编译器不会报错,但逻辑错位时调试起来容易漏掉
continue这个隐性跳转点
真正麻烦的不是语法本身,而是人脑容易把「do while」的结构直觉当成「先判断再执行」,从而误判 continue 的落点。盯住 while 那行表达式,就对了。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











