標籤:assign section 定義 問題 lob 需要 檔案 std 通過
這是一個範圍的問題。一個聲明將一個名字引進一個範圍;局部變數(通常在函數中定義)的範圍是從聲明的那一點開始,直到這個聲明所在的塊結束為止(一個塊就是由{}圍起來的一段代碼)。全域變數(在所有函數、類、命名空間之外定義)的範圍從聲明的那一點開始,直到這個聲明所在的檔案的結束。與全域變數重名的局部變數可以屏蔽全域變數,如果想在塊內使用全域變數需要通過範圍解析運算子::引用。 見下例:
1 #include <iostream> 2 using namespace std; 3 int x ; //定義一個全域變數x 4 int main() 5 { 6 int x ; //屏蔽全域變數x 7 cout<< "Global x Initial value = "<< ::x << endl; 8 cout<< "Local x Initial value = "<< x << endl; 9 x = 5; //對局部變數x賦值10 ::x = 6; //通過範圍解析運算子::引用全域變數x,並且改變其值11 cout<< " After assignment Global x = " << ::x << endl;12 cout<< "After assignment Local x = " << x <<endl;13 return 0;14 }
上述例子輸出結果為:
Global x Initial value = 0Local x Initial value = 11239412After assignment Global x = 6After assignment Local x = 5
從上面的例子還可以看出,如果沒有顯示初始化,那麼全域變數、靜態局部變數等靜態對象會被自動初始化為適當類型的0,而局部對象(也稱為自動對象)和在自由儲存區裡建立的對象(動態對象或者堆對象)將不會被初始化。
C++中局部變數是否可以和全域變數重名