C++ 条件变量的声明

示例

在forandwhile循环的条件下,还可以声明一个对象。在循环结束之前,该对象将一直处于作用域内,并将在循环的每次迭代中保持不变:

for (int i = 0; i < 5; ++i) {
    do_something(i);
}
// 我不再是范围。

for (auto& a : some_container) {
    a.do_something();
}
// a不再是范围。

while(std::shared_ptr<Object> p = get_object()) {
   p->do_something();
}
// p不再是范围。

但是,不允许do...while循环执行相同的操作。相反,请在循环之前声明变量,并(可选)将变量和循环都包含在本地作用域中,如果您希望变量在循环结束后超出作用域:

//这不编译
do {
    s = do_something();
} while (short s > 0);

// 好
short s;
do {
    s = do_something();
} while (s > 0);

这是因为循环的语句部分do...while(循环的主体)是在到达表达式部分(即while)之前求值的,因此,在循环的第一次迭代过程中,表达式中的任何声明都是不可见的。