C++ 静态持续变量 static

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 操作符。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 单独编译 和C语言一样,C++也允许甚至鼓励程序员将组件函数放在独立的文件中。可以单独编译这些文件,然后将它...
    何幻阅读 2,136评论 0 2
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,419评论 11 349
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,615评论 25 709
  • 文/以琳_ 耳热心酸古韵长,悲音高亢满沧桑。 其间况味千般品,世态轻尘一眼凉。
    以琳_阅读 955评论 38 49
  • 今天第一天来到深圳,感觉有点陌生而又熟悉。熟悉是因为对于城市已经早就不陌生,陌生是我对于深圳这种的城市个性还不太了...
    Ui空空道人阅读 174评论 0 0