条件中的变量声明
在 for
和 while
循环的条件下,也允许声明一个对象。在循环结束之前,此对象将被视为在范围内,并将在循环的每次迭代中保持不变:
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
),并且因此,在任何声明表达不会在循环的第一次迭代期间是可见的。