2009年4月15日 星期三

c++對於全域變數跟區域變數的區別

全域vs區域


當全域變數跟區域變數同名時,C++該如何區別呢?
是的,只要scope不同,他們的命名就不會影響


int x;

main(){
int x;
}



在此狀況 他是可以編譯不過的,所謂名稱不可重複,是指同scope不可以有同個命名參數
上面的情況 第一個x的scope為全域,而第二個為main的區域變數,互不影響

但是改成如下就不行了

main(){
int x;
double x;//X
}


這時候問題來了,這種狀態下要如何區別x呢?

萬能的scope運算子::


::相信大家都用過,是用來區別他是屬於哪個namespace
而他也能幫我們區別出全域變數

int x;

main(){
int x=10;
::x=20;
cout<<"區域變數x:"<<x<<endl;
cout<<"全域變數x:"<<::x<<endl;
}

輸出結果就會是

區域變數x:10
全域變數x:20

當scope運算子前面沒有東西時,就代表他想呼叫全域物件

沒有留言: