zoukankan      html  css  js  c++  java
  • static作用

    一、面向过程

    静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间,内存地址不变,直到整个程序运行结束。静态变量虽在程序的整个执行过程中始终存在,但是在它作用域之外不能使用。(相反,auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。

    另外,属于静态存储方式的量不一定就是静态变量。 例如:外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

    static全局变量

    静态全局变量即全局变量前加上static。静态全局变量有以下特点:

    1、在全局数据区分配内存(静态变量都在全局数据区分配内存);

    2、未经初始化的静态全局变量会被程序自动初始化为0

    3、静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;

    static局部变量

    静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。可用于两次函数调用之间对变量的值进行保存,有如下特点:

    1、该变量也在全局数据区分配内存;

    2、在程序刚开始运行时就完成初始化,以后函数调用时不再进行初始化,若没有显示初始化则被自动初始化为0;

    3、始终驻留在全局数据区,直到程序运行结束。作用域为局部作用域,到定义它的函数或语句块结束为止;

    总之,全局变量改造成static是改变了作用域,局部变量改造成static是改变了生存期;         

    static函数

    静态函数也称作内部函数,静态函数与普通函数不同,只能在声明它的文件当中可见,不能被其它文件使用;定义static函数的好处在于:不能被其它文件所用,其它文件可以定义相同名字的函数而不发生冲突。在定义函数时,如果没有加关键字static,或冠以关键字extern,表示此函数是外部函数

    二、面向对象

    static成员变量

    对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新。

    静态数据成员存储在全局数据区,在定义时要分配空间,所以不能在类声明中定义。它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它;

    int Myclass::Sum=0;  //初始化格式

    通过类作用域操作符合和成员操作符都可以访问静态成员变量;使用static成员变量的好处在于,一是没有进入程序的全局名字空间,不存在与程序中其它全局名字冲突的可能性;二是可以实现信息隐藏,静态数据成员可以是private成员,而全局变量不能。 

     static成员函数

    静态成员函数与静态成员变量一样,都是类的内部实现,属于类定义的一部分。普通成员函数隐含了一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体地属于某个类的对象的。但是静态成员函数不与任何的对象相联系,因此不具有this指针,从这个意义上,它无法访问属于类对象的非static成员变量和非static成员函数,只能调用其余的static成员函数。

    关于类的静态函数,总结如下:

    1、出现在类体外的函数定义不能指定关键字static;

    2、静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;

    3、非静态成员函数可以任意地访问静态成员函数和静态数据成员;

    4、因为没有this指针,静态成员函数不能访问非静态成员函数和非静态数据成员;

    5、因为没有this指针的额外开销,静态成员函数和类的全局函数相比速度上有少许提升;

    6、既可以使用类对象或类对象的指针通过成员访问操作符(. 或->)调用静态成员函数,也可以直接用类作用域操作符(::)调用静态成员函数。

  • 相关阅读:
    如何区分JS中的this?!
    JavaScript----函数的封装、继承和多态
    正则知识点解读及常用表达式(判断有效数字、手机号邮箱等)
    Java-集合练习5
    输入输出练习
    集合练习5
    集合练习4
    集合练习题2
    Java-集合练习题1
    Java-小练习简单银行程序
  • 原文地址:https://www.cnblogs.com/itree/p/4724510.html
Copyright © 2011-2022 走看看