C++ 杂记

C++ 静态持续变量 static

2017-07-11  本文已影响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 操作符。

上一篇下一篇

猜你喜欢

热点阅读