在c++中static的用法

 我来答
孤松独海
2011-11-23 · TA获得超过1513个赞
知道大有可为答主
回答量:1220
采纳率:0%
帮助的人:492万
展开全部
用静态成员和静态函数的好处是保证实例的唯一性,不是属于某个对象,而是属于这个类的。 这样可以减少消耗,对于许多函数都要调用的函数可以将其设为静态函数,内存只有一份拷贝实例。

静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。
在某个类A中声明一个static int number;初始化为0。这个number就能被所有A的实例共用。在A的构造函数里加上number++,在A的析构函数里加上number--。那么每生成一个A的实例,number就加一,每销毁一个A的实例,number就减一,这样,number就可以记录程序中共生成了多少个A的实例。
这只是静态成员的一种用法而已。
静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.

静态变量都在全局数据分配内存,包括后面将要提到的静态局部变量,对于一个完整的程序,在内存中的分布情况如下 代码区- 全局数据区- 堆区- 栈区
一般由new产生出来的动态数据存放在堆区,函数内部的自动变量存放在栈区。 自动变量一般会随着函数的退出而释放空间,静态数据(包括函数内部的静态局部变量)也存放在全局数据区,全局数据区的数据不会因为函数的退出而释放空间。

Static静态变量不能为其它文件所用(这个区别于extern的)

静态数据成员只能而且必须在类外初始化
静态成员函数里面没有隐藏this指针。
非静态成员函数可以访问静态数据成员。 静态成员函数不能访问非静态数据成员。

  关于静态成员函数,可以总结为以下几点:
  出现在类体外的函数定义不能指定关键字static;
  静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
  非静态成员函数可以任意地访问静态成员函数和静态数据成员;
  静态成员函数不能访问非静态成员函数和非静态数据成员;
  由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
  调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式