2012-02-08 51 views
-2

靜態變量可以存在於C++中的任何地方,而不是在類中?如果是這樣,他們展示了什麼行爲?由於沒有任何對象,我認爲它們不會在實例之間共享。靜態變量是否可以在C++中不存在類?

+0

如果你downvote,說爲什麼 - 然後我就可以改善這個問題。這點很重要。 – SirYakalot 2012-02-10 10:36:15

回答

3

是的。

靜態對象的生命週期是程序的生命週期,如果變量是在文件範圍聲明的(如果在塊範圍中定義,則沒有鏈接),則對象的鏈接是內部鏈接。

1

在函數之外,靜態表示該編譯單元是本地的。您可以使用匿名命名空間實現相同的效果。

1

當然,當然,例如:

int sequence() 
{ 
    static int result = 0; 
    return ++result; 
} 

所以,在這裏,結果變量將繼續在功能範圍之外的存在,並不斷加大在每次進入該功能的時間。

1

其他兩個地方:

  1. 全局變量和函數

    • 全球static變量(或函數)是局部的編譯單元,不能「看到」從其他編譯單元
  2. 局部變量

    • static第一次當它們的聲明被第一次越過時,局部變量被初始化一次(這對於只在第一次調用一個函數時做事很有用),並且在那之後它們甚至在函數返回後仍保留它們的值並再次呼籲

注意的static這些不同的用途真的什麼都沒有做對方。 static意味着不同的事情取決於你在哪裏使用它,很像const

0

這取決於你的意思是一個靜態變量。關鍵字static具有不同的語義,具體取決於您使用它的情況。

成員變量在聲明爲靜態時具有靜態存儲持續時間。這意味着這些變量的生命週期會持續到程序的持續時間。這是'靜態變量'的常見含義。有3種情況下變量將具有靜態存儲持續時間:

  1. 當在本地(函數作用域)變量上使用static關鍵字時。
  2. static關鍵字應用於類成員變量時。
  3. 任何沒有動態或線程存儲持續時間且不是本地變量的變量。

例子:

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 
相關問題