为什么static数据成员一定要在类外初始化

https://www.cnblogs.com/zhaobinyouth/p/6340008.html

为什么static数据成员一定要在类外初始化

  这是因为被static声明的类静态数据成员,其实体远在main()函数开始之前就已经在全局数据段中诞生了(见《Inside   The   C++   Object   Model》page247)!其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,如果你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?难道类永远不被实例化,我们就永远不能访问到被初始化的静态数据成员吗 

静态成员变量隶属于类,不是某个对象,所以静态成员变量不可能占用某一个对象的存储空间,所以静态成员需要再类外部定义,以便静态成员变量在全局数据区分配其存储空间。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#include <stdio.h>

class Test

{

private:

    static int cCount;

public:

    Test()

    {

        cCount++;

    }

    ~Test()

    {

        --cCount;

    }

    int getCount()

    {

        return cCount;

    }

};

int Test::cCount = 0;

  

static const int可以在类里面初始化,因为它既然是const,那程序就不会再去试图初始化

猜你喜欢

转载自blog.csdn.net/chengde6896383/article/details/83027834
今日推荐