最新修改: C\C++ static用法
一、预备知识
按作用域的称谓 按定义位置的称谓
局部变量:在函数内定义的变量 <----> 内部变量
全局变量:函数之外定义的变量 <----> 外部变量
变量分类:
|------- 作用域:局部变量;全局变量
|------- 生存周期:动态变量;静态变量
二、相同点(三种作用)
C语言中,static关键字有如下三种作用。这三种作用在C++中也完全适用。
1. 声明静态局部变量
理解:将一个局部变量的生存周期设定为整个应用程序的生存周期。
但是,这并不影响着它的作用域仍为局部区域。
案例:
在TestStaticLocalVariable()函数中,a为局部变量,又被声明成了static类型。
所以,第一次调用TestStaticLocalVariable()函数时,给a赋初始值1,然后输出2;
第二是调用TestStaticLocalVariable()函数时,会跳过a的定义语句,直接将a++,由于a保存了2,所有++后输出3。
2. 声明静态外部变量
理解:即声明为static类型的外部变量。
为了使本文件内定义的外部变量,不能被其他文件使用。
注:外部变量肯定是静态存储(生存周期)的,无论加static与否。
但是加上static后,它的作用域就变了。
案例:
(1)新建一个C++ Project,添加一个cpp文件,名为File,其中添加如下代码:
(2)在main.cpp文件中,声明外部变量,并试图使用。
可见,编译器将stc报错,而var可以通过。因为,stc被我们声明成了static类型。
3. 声明内部函数
内部函数:不能被其他文件调用的函数
外部函数:能够被其他文件调用的函数
理解:类似于外部变量。
为了使本文件定义的函数,不能被其他文件使用。
案例:
(1)新建一个C++Project,添加一个cpp文件,名为File,其中添加如下代码:
(2)在main.cpp文件中,声明add 和sub两个外部函数,并试图使用。
可见,编译器将add报错,而sub可以通过。因为,add函数被我们声明成了static类型,mian.cpp中是不能使用的。
三、不同点(类的成员)
这是C++不同于C的static用法。
1. 类的静态成员变量和静态成员函数
这方面,不多提了