类中静态变量的地址

时间:2013-10-23 16:41:39

标签: c++ static-members memory-address

如果我有一个带静态变量的类:

class A {
  public:
    ...
  private:
    static int var;
}

class A的多个实例是否会对静态变量var使用相同的地址?如果没有,将变量定义为同一地址的指针结果?即:

class A {
  public:
    ...
  private:
    static int* var;
}

3 个答案:

答案 0 :(得分:3)

类的所有实例都将使用相同的副本,从而使用静态变量的地址。如果你把它声明为指针无关紧要。

答案 1 :(得分:2)

所有实例都会看到静态变量的相同地址,因为该变量只有一个实例(这是static变量的整个点)。显然,如果只有一个实例,它只能存在于一个地方。如果它是int或指针并不重要,对于指针,您只需要一个可以使用的指针实例。

答案 2 :(得分:2)

class A的所有实例都将共享同一个var实例。如果我们查看draft C++ standard部分9.4.2 静态数据成员 1 说(强调我的):

  

静态数据成员不是类的子对象的一部分。如果声明了一个静态数据成员thread_local,则每个线程有一个成员副本。 如果未将静态数据成员声明为thread_local,则该类的所有对象共享一个数据成员副本。

此外段 2 说:

  

[...] [注意:一旦定义了静态数据成员,即使没有创建其类的对象,它也存在。 [...]