2010-06-10 38 views
3
class MyClass 
{ 
    static int staticInt; 

    void instanceMethod(int param) 
    { 
    static int parameter = param; 
    } 
} 

顯然staticInt在MyClass的所有實例之間共享。但是,MyClass的不同實例可以在instaceMethod中具有不同的parameter靜態局部變量值嗎?在對象之間是否存在靜態局部變量?

更新

什麼程序執行之間?當然,他們可能在多個程序實例中有所不同?什麼定義了「範圍」 - 執行單位? C++運行時?

更新

謝謝 - 幫我壓扁了嚴重錯誤。希望我可以接受他們,但我會以第一個答案去做,沒有其他標準。

+0

剛一說明(兩個不同的調用同一程序之間)的'初始化parameter'通常不是線程安全的。 – peterchen 2010-06-10 17:45:05

回答

7

只有一個parameter的實例。

如果您想爲類的每個實例使用parameter的實例,請使用非靜態成員變量。

1

是的,他們都堅持。它們在實例之間不能有不同的值。

+0

程序執行過程如何? – 2010-06-10 17:18:51

+1

不,他們不堅持執行。 – 2010-06-10 17:23:40

6

爲了讓parameter對於不同的實例具有不同的值,您必須使parameter成爲該類的非靜態成員。

在當前版本中,所有實例將共享相同的parameter對象。所有static對象在這方面表現完全相同。唯一取決於聲明點的是名稱的範圍。即名稱可見的區域。至於變量的壽命和保值屬性 - 它們總是相同的。無論您在哪裏聲明,尊重它就像是一個「全局」變量。

在您的示例中,parameterstaticInt之間在保留屬性方面沒有區別。唯一的區別是staticInt可以被該類的所有成員訪問,而parameter只能通過instanceMethod方法訪問。

該語言爲您提供了無法創建其值在程序執行間保持不變的變量的方法。這種持久性必須手動實施。

+0

@AudreyT - 你的第一段提到了使參數成爲類的非靜態成員。在靜態成員中引用實例方法中的靜態局部變量是否很常見?這在技術上是正確的還是因爲效果是相同的,我們可以認爲它是一個靜態成員? – 2010-06-10 17:28:01

+0

@ user144182:不,本地靜態變量不是類的成員。在C++中,「作爲成員」是一個概念,其主要涉及範圍和命名,而不是物理行爲。 – AnT 2010-06-10 17:30:37

相關問題