2011-01-30 213 views
4

爲什麼我們不能爲不同的對象使用不同的靜態變量副本?爲什麼一個類的靜態成員對於所有對象都是相同的?

+6

哦,真的,過來吧。 2降價?僅僅因爲他們不明白「靜態」意味着什麼的重要概念(還)?有可能更多的人犯了這個錯誤,特別是在他們早期的編程日。爲什麼這個問題比這個問題不那麼明確或者有用,比如說:「爲什麼隨機不是那麼隨機?」(它可能同樣被歸類爲「常識」)?我記得前段時間常見問題解答說,即使是初學者的問題也歡迎在這裏。 – Joey 2011-01-30 09:26:31

+1

@Joey:我同意,沒有任何問題僅僅因爲它表現出無知而應該得到冷落。我們都需要從某個地方開始,而這個問題雖然簡潔,寫得很好,並且直接指向了這一點。 – 2011-01-30 14:23:31

回答

4

靜態成員不與特定實例關聯。

如果你想爲每個實例使用不同的成員值,你應該使用實例成員(刪除static關鍵字)。

3

它的定義是一個靜態對象是由該類的所有實例共享的靜態對象。普通會員沒有這個屬性。

3

這就是static的定義 - 數據的一個副本存在。它是單獨存儲的,最有可能與庫或應用程序的所有其他靜態數據一起存儲。

-1

由於類靜態成員是分開存儲在BSS部分,所以每個類的每個實例具有相同的值。

1

因爲這就是static在這種情況下的含義。

5

由於從C++標準(2003)的部分9.4.2 $/1說,

靜態數據成員不是 的一類的子對象的一部分。有 只有 類的所有對象共享的靜態數據成員 的一個副本。

既然標準決定了C++是什麼,那麼什麼不是,所以這就是C++的設計!

靜態成員更像全局對象。相同的副本屬於所有對象!

看到這個職位的詳細回答:Do static members of a class occupy memory if no object of that class is created?

相關問題