2010-11-05 25 views
7
void foo() { 
    static int x; 
} 

void bar() { 
    static int x; 
} 

int main() { 
    foo(); 
    bar(); 
} 
+3

鑑於代碼?沒有。 – 2010-11-05 17:07:05

+0

他們不聲明相同的變量。兩個不同的函數永遠不會聲明相同的靜態局部變量。 – 2010-11-05 17:23:10

回答

20

他們每個人都只看到自己的一個。變量不能「看到」從它被聲明的scope

如果,另一方面,你這樣做:

static int x; 

void foo() { 
    static int x; 
} 

int main() { 
    foo(); 
} 

然後foo()只能看到它的本地x;全球x已被其「隱藏」。但改變一個不會影響另一個的價值。

+0

@FredOverflow:謝謝你捕捉... – 2010-11-05 17:08:20

+0

是匿名命名空間被認爲比C++中的靜態全局更好的風格? 「static int x;」的兩個用法(一個全球性的,一個地方性的)似乎使問題複雜化了。 – Flexo 2010-11-05 17:08:46

+3

@awoodlannd:在C++(D.2/1)中不推薦使用'static'來達到此目的。是否更好的風格取決於你問的人是否同意這種棄用... – 2010-11-05 17:17:16

3

這很好。實際上,編譯器輸出中變量的實際名稱可以被認爲是function_bar_x之類的東西,即編譯器有責任確保它們不會發生衝突。

6

變量是不同的,每個函數都有自己的範圍。因此,儘管這兩個變量在整個過程中都是持續的,但它們不會互相干擾。

1

這兩個靜態變量是不同的。

2

沒有發生,這兩個變量有theri範圍和十個分量他們的價值觀呼叫

0

的compilator翻譯以獨特的方式爲每個變量調用,在你的例子,如foo_xbar_x,所以他們threated不同。

不要這樣做,因爲您的代碼在一段時間後很難閱讀和維護,因爲您無法一次捕捉到您所指的x

相關問題