1. continue
到底做了什么?
-
作用范围
只能出现在for
、while
或do…while
循环体(或其嵌套块)内部。注意:在
switch
中单独使用continue
是非法的,除非switch
嵌套在循环内部。 -
执行效果
- 立即终止当前迭代,不再执行之后的语句。
- 进入下一次迭代:
- 对于
while
/do…while
:重新执行条件判断。 - 对于传统
for(init; cond; step)
:先执行step
(迭代表达式),再判断cond
。 - 对于范围
for (auto & x : container)
:取下一个元素,赋给循环变量x
,再进入循环体。
- 对于
// 示例:跳过所有以 '_' 开头的单词
std::string word;
while (std::cin >> word && !word.empty()) {
if (word[0] != '_')
continue; // 跳到下一次 `std::cin >> word`
// 只有当 word[0]=='_' 时,才执行下面的逻辑
process_underscore_word(word);
}
2. 为什么用 continue
?
- 减少嵌套
避免大量的if (...) { … } else { … }
。遇到“不想处理”的情况时,用continue
直接跳过。 - 逻辑更聚焦
把“排除条件”剥离到循环开始,让主体逻辑集中在无需continue
的路径上。
3. 警惕常见陷阱
-
别以为它跳出整个循环
for (... ) { if (cond) continue; // 只结束本次迭代,循环还会继续 // … }
-
for
循环的“步进”依旧执行for (int i = 0; i < 10; ++i) { if (i % 2 == 0) continue; // 这里只处理奇数 } // 即使 i 是偶数,也会先 ++i,再检查 i<10
-
与
break
混淆break
彻底跳出整个循环。continue
只跳过本次,保留循环的其余迭代过程。
-
不要与资源管理冲突
若循环体中有资源分配(文件、锁、动态内存等),确保在continue
前已做好清理,否则可能导致泄漏或死锁。
4. 最佳实践
- 早期排除
在循环起始处列举所有“需要跳过”的情况,统一用continue
语句,后续逻辑无需再关注这些边缘分支。 - 保持清晰
对同一个循环体,continue
的检查保持在前几行,避免后续代码阅读时产生混淆。 - 控制资源
如果循环体创建了临时对象或锁,务必在可能触发continue
的前面就执行它们的析构或释放。
总结
continue
:结束本次迭代,进入下一次循环- 用途:快速跳过不符合条件的项目,减少嵌套层数
- 注意:区分于
break
,保留循环进行;警惕资源管理
合理地运用 continue
,能让你的循环逻辑更加简洁易懂,又能精准地过滤掉那些“无需处理”的情况。希望这篇解析能帮助你在日常 C++ 编程中写出清爽、高效的循环代码!