Do-while 循环

一个 DO-而循环是非常相似,而循环,但条件是在每个周期结束时检查,而不是在开始。因此保证循环至少执行一次。

以下代码将打印 0,因为条件将在第一次迭代结束时计算为 false

int i =0;
do
{
    std::cout << i;
    ++i; // Increment counter
}
while (i < 0);
std::cout << std::endl; // End of line; 0 is printed to the console

注意:不要忘记 while(condition); 末尾的分号,这是 do-while 构造中需要的。

do-while 循环相反,以下内容不会打印任何内容,因为条件在第一次迭代开始时计算为 false

int i =0;
while (i < 0)
{
    std::cout << i;
    ++i; // Increment counter
}    
std::cout << std::endl; // End of line; nothing is printed to the console

注意: 使用 breakgotoreturn 语句可以退出 while 循环而不会使条件变为 false。

int i = 0;
do
{
    std::cout << i;
    ++i; // Increment counter
    if (i > 5) 
    {
        break;
    }
}
while (true);
std::cout << std::endl; // End of line; 0 1 2 3 4 5 is printed to the console

一个简单的 do-while 循环也偶尔用于编写需要自己范围的宏(在这种情况下,从宏定义中省略了尾随分号,并且需要由用户提供):

#define BAD_MACRO(x) f1(x); f2(x); f3(x);

// Only the call to f1 is protected by the condition here
if (cond) BAD_MACRO(var);

#define GOOD_MACRO(x) do { f1(x); f2(x); f3(x); } while(0)

// All calls are protected here
if (cond) GOOD_MACRO(var);