條件中的變數宣告

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