靜態變量可以存在於C++中的任何地方,而不是在類中?如果是這樣,他們展示了什麼行爲?由於沒有任何對象,我認爲它們不會在實例之間共享。靜態變量是否可以在C++中不存在類?
-2
A
回答
3
是的。
靜態對象的生命週期是程序的生命週期,如果變量是在文件範圍聲明的(如果在塊範圍中定義,則沒有鏈接),則對象的鏈接是內部鏈接。
1
在函數之外,靜態表示該編譯單元是本地的。您可以使用匿名命名空間實現相同的效果。
1
當然,當然,例如:
int sequence()
{
static int result = 0;
return ++result;
}
所以,在這裏,結果變量將繼續在功能範圍之外的存在,並不斷加大在每次進入該功能的時間。
1
其他兩個地方:
全局變量和函數
- 全球
static
變量(或函數)是局部的編譯單元,不能「看到」從其他編譯單元
- 全球
局部變量
static
第一次當它們的聲明被第一次越過時,局部變量被初始化一次(這對於只在第一次調用一個函數時做事很有用),並且在那之後它們甚至在函數返回後仍保留它們的值並再次呼籲
注意的static
這些不同的用途真的什麼都沒有做對方。 static
意味着不同的事情取決於你在哪裏使用它,很像const
。
0
這取決於你的意思是一個靜態變量。關鍵字static
具有不同的語義,具體取決於您使用它的情況。
成員變量在聲明爲靜態時具有靜態存儲持續時間。這意味着這些變量的生命週期會持續到程序的持續時間。這是'靜態變量'的常見含義。有3種情況下變量將具有靜態存儲持續時間:
- 當在本地(函數作用域)變量上使用
static
關鍵字時。 - 將
static
關鍵字應用於類成員變量時。 - 任何沒有動態或線程存儲持續時間且不是本地變量的變量。
例子:
struct foo
{
static int x; // This has static storage duration
};
void bar()
{
static int y = 5; // This has static storage duration
}
int z = 1; // This has static storage duration
因此,要回答你的問題,如果它是「變量可以有靜態存儲,在類的成員不?」,答案是肯定的。全局或命名空間範圍變量默認具有靜態存儲持續時間。聲明爲靜態的函數範圍變量也具有靜態存儲持續時間。
但是,static
關鍵字在用於全局或名稱空間範圍內的變量時具有其他含義。對於這些,static
指定該變量具有內部鏈接。也就是說,他們只能在同一翻譯單位內參考。
例子:
static int i = 5; // This has internal linkage
相關問題
- 1. 在C++中,靜態對象是否可以超出其靜態成員變量?
- 2. Activity中的靜態變量是否可以保存其狀態?
- 3. 在非靜態類中鎖定靜態變量是否安全?
- 4. 是否可以將C數據類型存儲在變量中?
- 5. 在C++中,是否可以在構造函數中訪問靜態變量?
- 6. 是否存在與「this」等效的c#中的靜態變量
- 7. 在哪些內存中存在靜態變量,局部變量是否存在?
- 8. 在JavaScript中,是否可以創建一個可修改的靜態類變量?
- 9. 在類中創建靜態變量(C++)
- 10. 在C++中訪問靜態類變量?
- 11. 是否存在公共靜態最終類變量
- 12. 是否可以在C++的類中初始化靜態常量成員對象?
- 13. C++中是否存在類似Java的靜態嵌套類?
- 14. PHP:是否可以在類中使用類?靜態回報
- 15. 是否可以在靜態方法中獲取類類型?
- 16. C#'動態'變量可以引用靜態類型嗎?
- 17. 內存分配靜態變量在非靜態類在.net
- 18. 靜態類中的靜態變量和非靜態類中的靜態變量
- 19. 如何檢查Python中是否存在靜態變量?
- 20. 可以在C中聲明一個靜態變量extern:
- 21. 在一個類中使用私有靜態變量是否好?
- 22. 靜態const變量在子類中不是常量
- 23. 在對象之間是否存在靜態局部變量?
- 24. 靜態變量在PHP類
- 25. 是在Android中保存靜態變量的「Globals」類嗎?
- 26. 變量是指靜態類
- 27. 是否可以在C++/CLI環境中創建靜態字典?
- 28. 是否可以在Java中擴展非靜態內部類?
- 29. 在c/C++中的CPU緩存中分配靜態內存:是否有可能?
- 30. 我可以在C中釋放()靜態變量和自動變量嗎?
如果你downvote,說爲什麼 - 然後我就可以改善這個問題。這點很重要。 – SirYakalot 2012-02-10 10:36:15