Namaran

Code daily. Without assist.

2026-09-12

loop_scope.cpp

#include <iostream>

int main() {
    for (int i = 0; i < 3; ++i) {
        std::cout << i << ' ';
    }
    std::cout << i << '\n';
}

これはコンパイルできるでしょうか。できない場合、どの行が原因でしょうか。

Answer

コンパイルできません。最後の行のstd::cout << iが原因です。for (int i = 0; ...)で宣言したifor文自身のスコープに属し、ループ本体の{}を抜けた時点でもう存在しません。whileループならiをループの外で宣言するので、ループが終わった後も参照できます。forの「初期化・条件・更新をひとまとめにする」便利さは、同時に「カウンタの寿命をループの中に閉じ込める」という制約でもあります。