條件中的變數宣告
在 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
),並且因此,在任何宣告表達不會在迴圈的第一次迭代期間是可見的。