美文网首页C++ 杂记
C++ 静态持续变量 static

C++ 静态持续变量 static

作者: 赵者也 | 来源:发表于2017-07-11 07:59 被阅读9次

    C++ 为静态存储持续性变量提供了3种链接性:外部链接性、内部链接性和无链接性。

    这3种链接性在整个程序运行期间都存在,与自动变量相比,它们的寿命更长。由于静态变量的数目在程序运行期间是不变的,因此程序不需要使用特殊的装置(如堆栈)来管理他们。编译器将分配固定的内存块来存储所有的静态变量,这些变量在整个程序运行期间一直存在。

    如果没有显式地初始化静态变量,编译器将把它设置为0。默认情况下,静态数组和结构将每个元素或成员的所有位都设置为0。

    三种静态持续变量的创建:

    1. 要想创建链接性为外部的静态持续变量,必须在代码块外面声明它;
    2. 要想创建链接性为内部的静态持续变量,必须在代码块外面声明它,并且使用static限定符;
    3. 要想创建没有链接性的静态持续变量,必须在代码块内声明它,并且使用static限定符。

    三种静态持续变量的例子:

    ……
    int  NUM_ZDS_GLOBAL = 80;                  //#1
    static  int NUM_ZDS_ONEFILE = 50;          //#2
    
    int  main(){
    …
    }
    
    void  fun1(int n){
             static int  nCount = 0;            //#3
             int  nNum = 0;                     //#4
    }
    
    void  fun2(int q){
             …
    }
    

    #1、#2、#3 在整个程序运行期间都存在。在 fun1 中声明的 #3 的作用域为局部,没有链接性,这意味着只能在 fun1 函数中使用它,就像自动变量 #4 一样。但是,与 #4 不同的是,即使在 fun1 没有被执行的时候,#3 也保留在内存中。

    #1、#2 的作用域为整个文件,即在声明的位置开始到文件末尾的范围内都可以被使用。

    具体地说,可以在 main、fun1、fun2 中使用它们。由于 #2 的链接性为内部,因此只能在包含上述代码的文件中使用它;由于 #1 的链接性为外部,因此可以在程序的其他文件中使用它。

    所有的静态持续变量都具有下面两个特征:

    1. 未被初始化的静态变量的所有位都被设置为0;
    2. 只能使用常量表达式来初始化静态变量。

    常量表达式可以使用字面值常量、const 常量和 enum 常量以及 sizeof 操作符。

    相关文章

      网友评论

        本文标题:C++ 静态持续变量 static

        本文链接:https://www.haomeiwen.com/subject/zmjphxtx.html