为什么所有对象的类的静态成员都相同?

时间:2011-01-30 09:12:37

标签: c++ class static

为什么我们不为不同的对象提供不同的静态变量副本?

7 个答案:

答案 0 :(得分:5)

因为它们会instance members

static members的主要特征是它们被所有类的实例共享。

答案 1 :(得分:5)

因为C ++ Standard(2003)的$ 9.4.2 / 1部分说明了,

  

静态数据成员不属于   一个类的子对象。有   只有静态数据成员的一个副本   由所有对象共享   类。

由于标准单独决定C ++是什么,不是什么,所以它就是C ++的设计方式!

静态成员更像是全局对象。同一副本属于所有对象!

有关详细解答,请参阅此帖子:Do static members of a class occupy memory if no object of that class is created?

答案 2 :(得分:4)

静态成员与特定实例无关。

如果您希望每个实例的成员值不同,则应使用 instance 成员(删除static关键字)。

答案 3 :(得分:3)

根据定义,静态对象是由类的所有实例共享的对象。普通会员没有这个属性。

答案 4 :(得分:3)

这是static的定义 - 存在一个数据副本。它是单独存储的,很可能与库或应用程序的所有其他静态数据一起存储。

答案 5 :(得分:1)

因为那是static在这种情况下的含义。

答案 6 :(得分:-1)

因为类静态成员分别存储在BSS部分中,所以类的每个实例都具有相同的值。