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

问题描述 投票:0回答:7

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

c++ class static static-members
7个回答
5
投票

因为那时他们将成为实例成员

静态成员的主要特征是它们由类的所有实例共享。


5
投票

因为 C++ 标准 (2003) 中的 $9.4.2/1 部分说,

静态数据成员不是 类的子对象。有 静态数据成员只有一份副本 被所有对象共享 上课了。

由于标准本身决定了 C++ 是什么、不是什么,所以这就是 C++ 的设计方式!

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

详细答案请参阅这篇文章:如果没有创建该类的对象,该类的静态成员是否会占用内存?


4
投票

静态成员不与特定实例关联。

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


3
投票

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


3
投票

这就是

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


1
投票

因为这就是

static
在这种情况下的意思。


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.