`
skwqy
  • 浏览: 49349 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Static

    博客分类:
  • c++
阅读更多

1、什么是static?
static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。
static 被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间(静态存储区生存周期长)。
static 它会把变量的可见范围限制在编译单元中,使它成为一个内部连接,它的反义词为”extern”。

2、怎样使用static?
static int a,b;                                    //全局变量                    
static float array[5]={1,2,3,4,5};
static float function();

void func(){
  static int count=0;                         //局部变量    
  ....
}

class aClass{
private:
  int x, y;
  static int count;                             //类的公共数据成员   
public:
   aClass(int a=0, int b=0)
  {
      x = a;
      y = b;
     count++;
   }
  ~aClass()
  {  count--;  }
  static int quantity()                       //只能访问类的公共数据成员
  {    return count;  }
};
初始化 (注意与赋值的区别)
int aClass::count =0;                      
aClass::count = 0;                          // 仅对静态的公共的数据成员是合法的

静态局部变量属于静态存储方式(即不在栈内),它具有以下特点
(1)生存期长:
     静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。

(2)作用域:
     静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同。

(3)比全局变量副作用小:
    离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值,虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,例如中途被其它函数修改。

(4)一个静态数据成员不能是联合成员,也不能是位域成员。

(5)静态成员函数不能声明为const!但参数可以是const。

注意事项:
(1)类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致了它仅能访问类的静态数据和静态成员函数。
(2)不能将静态成员函数定义为虚函数。
(3)由于静态成员声明于类中,操作于其外,所以对其取地址操作,就多少有些特殊,变量地址是指向其数据类型的指针 ,函数地址类型是一个“nonmember函数指针”。
(4)由于静态成员函数没有this指针,所以就差不多等同于nonmember函数,结果就产生了一个意想不到的好处:
    成为一个callback函数,使得我们得以将C++和C-based X Window系统结合,同时也成功的应用于线程函数身上。
(5)static并没有增加程序的时空开销,相反她还缩短了子类对父类静态成员的访问时间,节省了子类的内存空间。
(6)静态数据成员在<定义或说明>时前面加关键字static。
(7)静态数据成员是静态存储的,所以必须对它进行初始化。
(8)静态成员初始化与一般数据成员初始化不同:
    初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆;
    初始化时不加该成员的访问权限控制符private,public等;
    初始化时使用作用域运算符来标明它所属类;
    所以我们得出静态数据成员初始化的格式:
    <数据类型><类名>::<静态数据成员名>=<值>
(9)为了防止父类的影响,可以在子类定义一个与父类相同的静态变量,以屏蔽父类的影响。
    这里有一点需要注意:我们说静态成员为父类和子类共享,但我们有重复定义了静态成员,这会不会引起错误呢?
    不会,我们的编译器采用了一种绝妙的手法:name-mangling 用以生成唯一的标志

分享到:
评论

相关推荐

    C/C++中static,const,inline三种关键字详细总结

    一、关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。 static 的两大作用: 一、控制存储方式 static...

    易语言核心支持库5.0#64版(静态版)(krnln_static.lib)

    2012年8月7日修正易语言核心支持库krnln_static.lib,重点修正了易语言核心支持库先前存在的线程安全的隐患。开发多线程相关软件的用户应该更新支持库(普通编译)或重新编译(静态编译),然后重新发布软件。非多...

    特殊命令支持库1.4#1版(静态版 TianSin_Static.lib)(第三方)

    易语言TianSin_Static.lib支持库中文名为易语言特殊命令支持库,本易语言支持库为易语言提供一些辅助功能的静态支持。易语言TianSin_Static.lib支持库为一般支持库,需要易系统5.0版本的支持,需要系统核心支持库5.0...

    用Static Text控件显示当前系统时间

    用Static Text控件显示当前系统时间 用Static Text控件显示当前系统时间 用Static Text控件显示当前系统时间

    static变量和static函数的用法摘抄

    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域...

    mfc-static控件显示图片-滚动条-放大缩小

    这个static区域重绘,实再是搞不定,这是目前最大的硬伤了。。。 还有,工程是柔合了opencv1.0的东西,版本太旧了。。 我贴出一个网址,如果您完善了,或者有什么疑问(不保证解决,解答),可以在我的博客上留言。...

    【Java基础】Java8新特性—接口中使用default和static关键字

    新特性二.defalut方法三.static方法 接口中的变量默认类型是public static final,也是就是说是 公有静态常量 。 而方法默认是public abstract,公有抽象方法,但是事实真的是这样吗? 一.新特性 Java 1.8对接口有两...

    MFC实现STATIC+TEXT控件

    mfc Static text点击事件,我想在Static Text控件上,如果有点击(就是拿手指点)的话,可以触发一些行为

    public static String[] split(String s, String regex)

    public static String[] split(String s, String regex) s参数为待拆分字符串, regex参数有两种格式: 单字符的字符串(长度1),功能如下:split(“ab#12#453”, “#”) 返回带5个元素的数组:ab, #, 12, #, 453 ...

    const,extern,static,volatile的使用

    const,extern,static,volatile的使用

    JS中的public和private对象,即static修饰符

    先看下面的例子,它将告诉我们在JS世界中也有C#里的public , private ,及static等

    类的static,const,static const,const static成员的初始化

    static,const,static const,const static是c++中几个常见的很容易弄混淆的几个概念,在这里总结了一下,与大家分享!

    pcre-7.9-static for windows

    1. 向项目属性-&gt;VC++目录-&gt;包含目录中添加pcre-7.9-static目录; 2. 向项目属性-&gt;VC++目录-&gt;库目录中添加pcre-7.9-static目录; 3. 向项目属性-&gt;C/C++ -&gt;预处理器-&gt;预处理器定义中添加HAVE_CONFIG_H、PCRE_STATIC; ...

    Static背景和颜色 更改

    自己编写的 可以实现 改变static空间背景色和字体色的 类 希望对学习VC的 同志有帮助

    visdom static脚本包

    安装visdom 启动后显示蓝屏,提示缺少/visdom/static/下一些脚本文件

    mfc 自绘控件 static 可改背景颜色字体等

    mfc本身的static控件背景为灰色,影响整体效果。这个是自绘的Static控件,可改背景颜色字体等

    static 用法

    static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准). (1)局部静态变量 (2)外部静态变量/函数 (3)静态...

    静态(static)方法重写(override)

    静态(static)方法重写(override)

    wordpress插件纯静态html网页页面生成插件simply-static

    simply-static是一个简单的一键生成全站静态html文件的wordpress插件,支持生成或不生成指定url的html文件,生成文件的资源路径可选相对路径、绝对路径和脱机文件,html文件可以直接生成在服务器或zip压缩包下载。...

Global site tag (gtag.js) - Google Analytics