C\C++ static用法

预备知识

变量分类:

按作用域分: 局部变量;全局变量
按生存周期分:动态变量;静态变量

名称 定义 按定义位置的称谓
局部变量 函数内定义的变量 内部变量
全局变量 函数之外定义的变量 外部变量
名称 定义 说明
动态变量 声明为auto的变量[auto默认省略不写] 出了作用域其内存就被释放
静态变量 声明为static的变量 保存在全局数据区,程序运行期间不释放

C\C++中static的用法

主要为以下4种,其中1-3为C\C++共有,4为C++特有(因为涉及到类)

1.  声明静态局部变量

即将一个局部变量的生存周期设定为整个应用程序的生存周期。

但是,这并不影响着它的作用域仍为局部区域。

上图中代码,在TestStaticLocalVariable()函数中,a为局部变量,又被声明成了static类型,即静态局部变量。所以,第一次调用TestStaticLocalVariable()函数时,给a赋初始值1,然后输出2;第二次调用TestStaticLocalVariable()函数时,会跳过a的定义语句,直接将a++,由于a保存了2,所有++后输出3。即a一直存在,但只能由TestStaticLocalVariable()函数调用。

2. 声明静态全局变量

即声明为static类型的全局变量。

作用:为了使本文件内定义的全局变量,不能被其他文件使用。

注:全局变量肯定是静态存储(生存周期)的,无论加static与否。但是加上static后,它的作用域就变了,只在本文件中可见。案例如下

(1) 新建一个C++ Project,添加一个cpp文件,名为File,其中添加如下代码:

(2) 在main.cpp文件中,声明外部变量,并试图使用。

可见,编译器将stc报错,而var可以通过。因为,stc被我们声明成了static类型。

3. 声明内部函数

内部函数:不能被其他文件调用的函数
外部函数:能够被其他文件调用的函数

在函数名前加static后,函数变成内部函数,不能被其他文件调用。【类似于外部变量,为了使本文件定义的函数,不能被其他文件使用】案例如下:

(1) 新建一个C++Project,添加一个cpp文件,名为File,其中添加如下代码:

(2) 在main.cpp文件中,声明add 和sub两个外部函数,并试图使用。

可见,编译器将add报错,而sub可以通过。因为,add函数被我们声明成了static类型,mian.cpp中是不能使用的。

4. 声明类的静态成员变量和成员函数(C++)

在类的成员变量或成员函数前声明static,使得类的成员属于整个类,被该类所有的对象共享。

类的静态成员(变量\函数),可以通过类名来调用(类名::成员名)。非静态成员不可以通过类名调用。静态和非静态成员都可以通过对象名调用。

由整体(属于整个类的成员,即静态的)不可访问特殊(属于具体对象的成员,非静态),特殊可以访问整体可知
(1) 静态成员函数不可以访问非静态成员变量和非静态成员函数【整体不可访问特殊】
(2) 非静态成员函数中可以使用静态成员变量和静态成员函数 【特殊可以访问整体】

——————————————————————–

该文2011-07-15 18:28首发于我的CSDN专栏。有改动。

作者:JarvisChu
原文链接:C\C++ static用法
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

发表评论