static的作用

1、隐藏

所有加上static修饰的变量和函数都只能用在该cpp文件中无法被extern。

2、保持变量内容的持久

无论是全局static还是局部static,其均在程序刚运行的时候初始化在”全局\静态区"中,在函数运行结束之后才会被释放。与全局变量相比,静态变量最主要的区别还是第1点所述的隐藏。

3、默认初始化为0

”全局\静态区"中的变量在没有初始值的情况下会被默认初始化为0,也即全局变量也有此特征。

4、c++中的类声明static

(1)static数据成员:

        1)类中数据成员声明为static,则该数据成员的所有者为类本身而非类的某一个对象,也即该类的对象只拥有其拷贝。

        2)static数据成员是优先于对象存在的,因此类中的static数据成员必须在类外初始化,因为static变量存放在”全局\静态区",在程序初始化的时候就已经分配内存了,而类内数据成员的初始化要在定义了该类的变量之后进行。

(2)static成员函数:

        1)类中成员函数声明为static,该函数一样也是被类而非类的每个对象所拥有,static函数没有this指针(this指针是指向本对象的指针,static函数是属于类本身的,因而不可能拥有this指针,没有this指针就意味着无法指向属于本对象的数据成员,因而只能调用属于类的static数据成员),其只能调用类中的static数据成员。

        2)static成员函数不能被virtual修饰,static成员函数不属于任何一个对象或者实例,因此加上virtual没有实质意义。static成员函数没有this指针,而虚函数的实现是为每一个对象分配一个vptr指针,而vptr指针是通过this指针调用的,所有不能为virtual。(虚函数的调用关系,this->vptr虚函数指针->ctable虚函数表->virtual function虚函数)

        3) 所有的全局函数、类的成员函数包括static函数均存放于代码区中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanzhe1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值