void foo() {
static int x;
}
void bar() {
static int x;
}
int main() {
foo();
bar();
}
回答
他們每個人都只看到自己的一個。變量不能「看到」從它被聲明的scope外
如果,另一方面,你這樣做:
static int x;
void foo() {
static int x;
}
int main() {
foo();
}
然後foo()
只能看到它的本地x
;全球x
已被其「隱藏」。但改變一個不會影響另一個的價值。
@FredOverflow:謝謝你捕捉... – 2010-11-05 17:08:20
是匿名命名空間被認爲比C++中的靜態全局更好的風格? 「static int x;」的兩個用法(一個全球性的,一個地方性的)似乎使問題複雜化了。 – Flexo 2010-11-05 17:08:46
@awoodlannd:在C++(D.2/1)中不推薦使用'static'來達到此目的。是否更好的風格取決於你問的人是否同意這種棄用... – 2010-11-05 17:17:16
這很好。實際上,編譯器輸出中變量的實際名稱可以被認爲是function_bar_x
之類的東西,即編譯器有責任確保它們不會發生衝突。
變量是不同的,每個函數都有自己的範圍。因此,儘管這兩個變量在整個過程中都是持續的,但它們不會互相干擾。
這兩個靜態變量是不同的。
沒有發生,這兩個變量有theri範圍和十個分量他們的價值觀呼叫
的compilator翻譯以獨特的方式爲每個變量調用,在你的例子,如foo_x
和bar_x
,所以他們threated不同。
不要這樣做,因爲您的代碼在一段時間後很難閱讀和維護,因爲您無法一次捕捉到您所指的x
。
- 1. Objective-C中的不同靜態變量聲明如何?
- 2. 爲什麼靜態變量需要在C++中聲明兩次
- 3. 在Swift類或結構中聲明爲靜態的變量會發生什麼?
- 4. 在函數中聲明靜態變量
- 5. 將在變量聲明中發生什麼?如果實現的類具有相同的變量?
- 6. 函數內部聲明的靜態變量的值是什麼?
- 7. 在派生類中聲明相同的變量名,而在超類中聲明相同的變量名作爲靜態變量
- 8. 聲明靜態變量在C++中的函數調用
- 9. 爲什麼我不能在Java中聲明兩次相同的變量?
- 10. Python - 同時聲明兩個具有相同值的變量
- 11. 如果兩個線程同時訪問相同的bool變量會發生什麼情況?
- 12. 如何在內聯函數中聲明一個靜態變量?
- 13. 爲什麼我不能在C#中的不同範圍內聲明一個具有相同名稱的變量?
- 14. 爲什麼不聲明每個變量都是靜態的
- 15. 在Actionscript 3中,如果不同的事件同時改變一個變量的值會發生什麼?
- 16. PHP - 如果我得到兩個相同的會話ID會發生什麼?
- 17. 如果多個pthread使用相同的函數,會發生什麼
- 18. 即使函數是靜態的,爲什麼我們不能在函數體內聲明靜態變量?
- 19. 爲什麼兩個FOR循環的相同變量聲明是正確的?
- 20. 如何聲明兩個具有相同結構的表變量?
- 21. 當你在JavaScript中的函數聲明中聲明.autoCurry()會發生什麼?
- 22. C++:有兩個相同的函數,一個給出錯誤。發生什麼事?
- 23. 如果變量未在Javascript中聲明,會發生什麼情況?
- 24. 在Ruby中聲明變量時後臺會發生什麼?
- 25. 爲什麼這兩個函數不會返回相同的值?
- 26. 如果使用相同的數據在JavaScript中聲明多個變量?
- 27. 兩次在代碼中解析相同的變量聲明
- 28. 爲什麼我不能轉發聲明靜態函數?
- 29. 如果兩個ObjC類別重寫相同的方法會發生什麼?
- 30. 爲什麼這兩個數學函數不會返回相同的結果?
鑑於代碼?沒有。 – 2010-11-05 17:07:05
他們不聲明相同的變量。兩個不同的函數永遠不會聲明相同的靜態局部變量。 – 2010-11-05 17:23:10