int main() {
{ int x = 1; cout << x; // 1
{ cout << x; // 1 而非隨機值
int x = 2; cout << x; // 2
{ cout << x; // 2
int x = 3; cout << x; // 3
}
cout << x; // 2
}
cout << x; // 1
}
}
int x = 2; **聲明**在 cout << x; **之後**,但聲明本身使該作用域內的 x 綁定到新實體,導致前面的 x 引用外層 x=1(編譯期已確定)。每個塊入棧時為局部變量分配棧幀空間,x 在不同層級有獨立存儲位置。輸出時讀取的是對應層級的棧槽,數值確定,絕非隨機內存。
outerX, innerX)。-Wshadow (GCC/Clang) 或 /W4 (MSVC) 捕獲遮蔽風險。{} 限制生命周期,但需注意遮蔽陷阱。結論:輸出確定值是 C++ 作用域規則與編譯期綁定的必然結果,理解「聲明提前綁定」是關鍵。