Executes a statement repeatedly, until the value of expression becomes false. The test takes place after each iteration.
attr(optional) do statement while ( expression ) ; |
attr(C++11) | - | any number of attributes |
expression | - | any expression which is contextually convertible to bool. This expression is evaluated after each iteration, and if it yields false , the loop is exited. |
statement | - | any statement, typically a compound statement, which is the body of the loop |
statement is always executed at least once, even if expression always yields false. If it should not execute in this case, a while or for loop may be used.
If the execution of the loop needs to be terminated at some point, a break statement can be used as terminating statement.
If the execution of the loop needs to be continued at the end of the loop body, a continue statement can be used as shortcut.
As part of the C++ forward progress guarantee, the behavior is undefined if a loop that has no observable behavior (does not make calls to I/O functions, access volatile objects, or perform atomic or synchronization operations) does not terminate. Compilers are permitted to remove such loops.
#include <iostream> #include <algorithm> #include <string> int main() { int j = 2; do { // compound statement is the loop body j += 2; std::cout << j << " "; } while (j < 9); std::cout << '\n'; // common situation where do-while loop is used std::string s = "aba"; std::sort(s.begin(), s.end()); do std::cout << s << '\n'; // expression statement is the loop body while(std::next_permutation(s.begin(), s.end())); }
Output:
4 6 8 10 aab aba baa
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/language/do