一类中静态成员的内存分配

Sad*_*que 7 c++ visual-c++ c++11

我最近发布了一个问题: 静态类成员的初始化.

现在请检查此代码:

#include<iostream>
class A
{
    static int obj_s;
public: 
    A()
    {
        obj_s++;
        std::cout << A::obj_s << "\nObject(s) Created\n";
    }
};

int A::obj_s = 0;

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

即使一个人没有创建任何A类对象,使该成员obj_s保持一个值0- 自定义之后是不是需要内存?

Naw*_*waz 7

显然,这需要记忆.而int A::obj_s=0正是它的作用:它定义了它的记忆沿着变量.实际上,当我们说我们定义了一个变量时X,这意味着我们定义了一个内存sizeof(X),以及我们标记为的内存区域X.


更多关于静态成员:

A::obj_s是该类的静态成员A.并且静态成员不存在任何实例.他们不是实例的一部分A.

标准中的§9.4.2/ 3和7,

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

静态数据成员的初始化和销毁非本地对象完全相同(3.6.2,3.6.3).

在这里阅读我的完整答案:

如果没有创建该类的对象,那么类的静态成员是否会占用内存?