重复执行 语句,直至 表达式 的值变为 false。检测发生于每次重复之后。

语法

属性(可选) do 语句 while ( 表达式 ) ;
属性(C++11) - 任何数量的属性
表达式 - 任何能按语境转换成 bool表达式。每次重复之后求值表此表达式,而若它产生 false,则退出循环。
语句 - 任何语句,常为复合语句,它是循环体

解释

始终至少执行一次 语句,即使 表达式 始终产生 false。若该情况下不应执行,则可用 whilefor 循环替代。

若循环的执行必须在某点终止,则可以 break 语句作为终止语句。

若循环需要在循环体结尾继续,则可以 continue 语句作为快捷方式。

注意

作为 C++ 向前进展保证的一部分,若无可观察行为(不调用 I/O 函数,访问 volatile 对象,或进行原子或同步操作)的循环不会终止,则其行为未定义。允许编译器移除这种循环。

关键词

do,while

示例

运行此代码

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <string>
  4.  
  5. int main()
  6. {
  7. int j = 2;
  8. do { // 复合语句为循环体
  9. j += 2;
  10. std::cout << j << " ";
  11. } while (j < 9);
  12. std::cout << '\n';
  13. // 使用 do-while 循环的常见情形
  14. std::string s = "aba";
  15. std::sort(s.begin(), s.end());
  16. do std::cout << s << '\n'; // 循环体是表达式语句
  17. while(std::next_permutation(s.begin(), s.end()));
  18. }

输出:

  1. 4 6 8 10
  2. aab
  3. aba
  4. baa