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