1

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

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

多个实例是否会class A为静态变量使用相同的地址var?如果不是,将变量定义为指针会导致相同的地址吗?IE:

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

3 回答 3

3

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

于 2013-10-23T16:43:04.953 回答
2

所有实例都将看到静态变量的相同地址,因为该变量只有一个实例(这是变量的全部点static)。显然,如果只有一个实例,它就只能存在于一个地方。它是int一个指针还是一个指针都没有关系,对于指针,您只有一个可以使用的指针实例。

于 2013-10-23T16:42:40.613 回答
2

A类的所有实例都将共享同一个实例var。如果我们看一下草案 C++ 标准部分9.4.2 静态数据成员1段说(强调我的):

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

此外,第2段说:

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

于 2013-10-23T16:42:58.067 回答