static修饰符

5 篇文章 0 订阅

总结一下c, c++中关于static的理解:(static 个人认为可以理解为限定其存储空间和作用域,而const,理解为限制其访问权限)

c语言中

       1.0 修饰局部变量:定义只会被执行一次,被放在静态区,延长了它的生命周期,直到程序结束之后才释放。

       2.0 修饰全局变量,表示只能在本文件中使用,限定作用域

       3.0 修饰函数,同修饰全局变量一样

c++中:

       1.0成员变量:该静态变量是属于整个类的,和具体对象无关。在内存中只有一份,类似于C中静态区,可以多个对象共享。

它的定义和初始化,只能在类体外进行,(因为,在类体里面定义的成员变量,在构建具体对象时是会分配新的存储空间的),类内部只是进行声明 (这个在 c++ primer 第五版,第7.6章节:类的静态成员中有说明,其中提到常量类型的static 成员变量在类体内的定义)

它的访问可以直接通过类名访问,亦可以通过对象名访问。

     2.0 成员函数:只能访问类的静态成员变量哦,不存在this指针,因为访问非静态成员变量,都是访问对象自己的成员变量,this指针也一样,而static成员函数,是类相关的,和具体对象无关。

     修饰成员 函数或者成员变量时,如果成员函数在类的外部定义,只需在声明的时候使用,实现定义的时候不需要

     to have static linkage [-fpermissive] 否则报错

而const 在后的成员函数,也一样。static 个人认为可以理解为限定其存储空间和作用域,而const,理解为限制其访问权限。后续添加一篇关于const 的总结。

附加补充:

        概念这种东西搞多了某些时候会被搞糊涂,突然有一个奇怪疑惑,为什么static成员函数可以在类体内定义?需要把具体的内存里面的东西对应起来看。
成员函数在新的对象生成时可不会占用新的空间,成员函数属于代码部分,不属于数据,在实际物理存储空间中就存了一分代码,但之所以说非静态成员函数和具体类相关,只是非静态成员函数在我们调用的时候,会有一个隐示的参数 this,这个参数是更具体对象相关的,这一件事是编译器帮我们加上去的。

比如我就做了这么一个实验:

像第23行这样自以为然的代码是编译不过的,定义对象 a,b时,并没有说对象里面有一个变量 speak 来保存改成员函数的指针,可以看出来定义再多的函数,整个类的大小就是 int age的空间大小。

要想获取成员函数的指针,直接通过函数名即可(带上类名只是表示这一个作用域下定义的函数)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值