【问题标题】:Why are the static members of a class the same for all objects?为什么类的静态成员对于所有对象都相同?
【发布时间】:2011-06-18 01:04:32
【问题描述】:

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

【问题讨论】:

  • 哦,说真的,来吧。 2票否决?仅仅因为他们不了解static 意味着什么的关键概念(还)?可能会有更多的人犯这个错误,尤其是在他们早期的编程时代。为什么这使得这个问题不如“为什么随机不是那么随机?”(这同样可以归类为“常识”)那么清晰或有用?我记得前段时间常见问题解答说这里欢迎初学者提问。
  • @Joey:我同意,毫无疑问,不应该仅仅因为它表明无知而拒绝投票。我们都需要从某个地方开始,这个问题虽然简洁,但写得很好,直截了当。

标签: c++ class static


【解决方案1】:

因为那时他们会是instance members

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

【讨论】:

    【解决方案2】:

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

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

    由于标准单独决定了 C++ 是什么,什么不是,所以 C++ 就是这样设计的!

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

    详细答案见此帖:Do static members of a class occupy memory if no object of that class is created?

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

              • 也许吧。但再一次,这是一个实现细节,不是真正了解正在发生的事情(或规范保证的内容)的关键。
              猜你喜欢
              • 2012-04-19
              • 2023-03-07
              • 1970-01-01
              • 2016-05-15
              • 2023-03-06
              • 1970-01-01
              • 1970-01-01
              • 2012-06-08
              • 2016-08-13
              相关资源
              最近更新 更多