理解C++ static

1、为什么设计static?考虑下面的需求:

  在程序运行过程中,在一个范围内,有一个对象大家共享,而且可以多次使用,状态能够保持,对象的生命周期一直持续到程序运行结束。

2、静态对象要分配在全局数据区,程序运行期间,不能释放,一直到程序终止。

3、静态对象的生命周期是程序的整个运行过程。但是可以限定静态对象的作用域,根据作用域的大小,可分为静态局部对象,静态全局对象。静态局部对象是指方法内的静态对象,静态全局对象是指编译单元里的静态对象。(注意:生命周期是时间概念,作用域是空间概念)

4、静态对象只能初始化一次。严格来讲,任何对象都只能初始化一次,而且是在定义的时候。后面再想修改对象的值,只能通过赋值操作。什么叫初始化,什么叫赋值?初始化是指创建对象的时候(也就是定义的时候),给对象设置初始值。赋值是指对象已经存在值了,擦除当前值,使用新值代替。任何对象都只创建一次,也就是初始化一次。

5、那为什么方法内的局部对象可以初始化多次呢?

  实际上,方法内的对象也只是初始化一次。第一次调用方法,初始化对象,方法退出,对象销毁。第二次调用方法,又初始化对象,但是,这时的对象不是第一次调用时的对象,而且没有任何关系。

6、C++可以声明多次,只能定义一次,但是有一些例外。static就是一例,static可以在多个编译单元里定义,这是因为static是内部链接。全局static的作用域是当前的编译单元。不同编译单元都有专属于自己的一份static对象,而且彼此没有关系,不会保持相同的值。

7、对于类,头文件是对类的定义,但是是对类的成员的声明。类中static成员,在类定义中声明,在类定义外,需要定义,也就是初始化。类中static成员的作用域是当前类,所有类对象共享。

8、声明:是说我有这个东西。

     定义:创建这个东西,并初始化,说明这个东西就在这里。

9、基本类型对象:

  static对象,定义的时候,没有显示初始化,会被隐式初始化为0或者null,动态对象(方法内的对象,在栈上分配)定义的时候,没有显示初始化,可以认为隐式初始化为一个随机值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值