C++的声明和定义与内存

以前在上学的时候,没有仔细的看过这个点,一直认为声明、定义差不多,也没有深入的思考。这次重新巩固的时候,我发现本身这三个点在不同的类型的情况下表现的差别很大。先把最终的结果写上:

局部变量:声明和定义在调用的时候同时进行内存分配。

全局变量:声明的时候不分配内存,定义的时候分配内存(注意,此处的全局变量是指多个文件调用,使用extern声明的。如果只单个文件调用,还是局部变量一样)。

函数:声明和定义的时候不分配内存,调用的时候分配内存。

结构体:声明和定义的时候不分配内存,实例化的时候分配内存。

类:声明和定义的时候不分配内存,实例化的时候分配内存。

 

我们常见的是局部变量的方式:

int a = 1;

 这样其实是把声明和定义一起做了,我也一直以为其他的变量都差不多,但是其实想想都不对的。我们使用系统的变量,就好像使用已经弄好的工具一样,当然直接拿来用就好了。但是如果是我们自己声明并且定义的变量比如:函数、类、结构体。这种就是新的工具了,肯定要告诉别人:我先把这个工具准备好,但是我不用,等我需要的时候再用。这就是先声明和定义好了。然后待实例化或者调用的时候才用的例子。所以这里就会引出静态成员变量,为什么要在类外初始化了。在声明的时候,没有内存,但是在实例化的时候静态的大家要一起用。所以没有办法,一定要在类外去初始化一下。否则在多线程的时候就会出现很多的问题,干脆先把初始化这个事情做了吧。

不知道为什么,我总觉得在类外初始化这种设计缺乏美感,感觉是C++在设计的时候一种无奈之举。因为这个操作确实很令人费解。

好了,今天就到这里吧。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值