C++中static用法

如果不考虑类
那么static如果修饰全局变量和函数的话就起到了隐藏的目的,例如同时编译两个文件a.cpp和b.cpp a中有一个全局变量char  a 和函数test() 那么他们就具有全局可见性,即在b中也可以访问到该全局变量和该函数。如果加上static之后全局变量就只能在本原文件中访问,跨文件是不可以访问的。
例子:
a.cpp

b.cpp


运行结果:

加了static以后编译会报错:

如果static修饰的是局部变量那就是改变了局部变量的生存时间,如果没有static修饰,那么当局部变量所处的函数块执行结束以后,该变量就释放了,但是如果加上static修饰的话那么该变量一直存在到程序执行结束。
static修饰还可以将未初始化的静态全局变量和静态局部变量初始化为0.类似于未初始化的全局变量。
如图所示:

输出结果为:

static在类中的用法:
C++中重(chong)用了static这个关键字并赋予了他与前面所不同的含义:用static修饰的变量属于这个类而不是属于类的某一个特定的对象,即static所修饰的函数或者是变量是所有该类型的对象都能看见的,和访问的。这个成员变量是公共的且只存在一份。如果用sizeof(对象)结果一定是不包含static成员的类大小。
static修饰类的成员变量时:
通常普通的成员变量存在每一个对象中,static修饰的成员变量不像普通的成员变量,他是独立于对象所存在的。static成员变量与类相关联,而与类的对象不相关联。static成员变量和普通的成员变量一样要遵从public,protected,private的访问规则。
static变量存储在全局(静态)存储区,静态成员函数的初始化一般是在类外进行的,类内只是一个声明。比如有一个类是class Account{ static int rate;}
它的初始化就是在类外int Account::rate=10;除了 const static数据成员可以再类内进行初始化以外,其他static修饰的成员变量是不能再类内进行定义的。
static修饰成员函数时:
static修饰成员函数和修饰成员变量一样,它是和类相关联,与类的对象不相关联。即他也是属于整个类所共有的,因为他是共有的不属于任何一个对象,而this指针机箱对象的本身所以在static修饰的成员函数里面是没有this指针的。又因为没有this指针所以static修饰的成员函数时不能访问非静态的成员变量和函数的,他只能调用静态的成员函数和成员变量。static成员函数不能被声明为virtual,const,volatile(建议编译器不要将该函数放在寄存器中)。因为static修饰的函数不属于任何一个具体的对象,所以无法继承,成员函数加上const,表明承诺不会修改该函数所属的对象,所以也不能添加。
总结一下静态成员函数:
静态函数之间是可以互相访问的,静态函数也可访问静态的成员变量,但是静态函数不能访问非静态的成员和函数。非静态的函数是可以访问静态的成员函数和变量的。
没有this指针得开销静态函数访问相对于非静态函数访问速度上要有少许增加。
如有错误,请在评论中指出,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值