条件中的变量声明

forwhile 循环的条件下,也允许声明一个对象。在循环结束之前,此对象将被视为在范围内,并将在循环的每次迭代中保持不变:

for (int i = 0; i < 5; ++i) {
    do_something(i);
}
// i is no longer in scope.

for (auto& a : some_container) {
    a.do_something();
}
// a is no longer in scope.

while(std::shared_ptr<Object> p = get_object()) {
   p->do_something();
}
// p is no longer in scope.

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

//This doesn't compile
do {
    s = do_something();
} while (short s > 0);

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

这是因为语句一个 do...while 环路(环路的身体)的部分求值之前的表达在达到部(while),并且因此,在任何声明表达不会在循环的第一次迭代期间是可见的。