C++中 auto,static,register,extern的作用
auto、static、register、extern这四种都是用来变量存储说明的关键字,其作用格式为:
存储说明符 变量类型 变量名称 = 变量初始值
在开始讨论这四种说明符的作用之前,有必要讲解一下局部变量(Local variables)和全局变量(
Global variables)的定义
程序是由若干模块构成,模块之间独立工作互不干涉,局部变量一般定义在函数内部(包括main函数),岁函数执行完毕变量也随之销毁,而全局变量是供整个程序所用,当程序编译时即存在,等到程序完全结束时才销毁。
1 //全局变量及局部变量
2 #include <iostream>
3 using namespace std;
4 int b = 100;
5 int func(){
6 int a = 10; //只作用于函数内部,函数调用完毕自动销毁
7 return a;
8 }
9 int main(){
10 cout<<b<<endl; //输出b的值为100
11 int a = 20;
12 cout<<a<<endl; //输出a的值为20
13
14 return 0;
15 }
auto说明符
auto,中文释义为“自动的”,其作用是使变量在离开作用域(例如,函数内部)即自动销毁,一般情况下,auto说明符可以省略,因为计算机在执行程序的过程当中已经实现了这个功能,示例如下:
1 #include <iostream>
2 using namespace std;
3 int main(){
4 auto int a = 2; //离开main函数,变量a自动销毁
5 cout<<a<<endl;
6
7 return 0;
8 }
static说明符
static,中文释义为“静态的”,其作用为定义的变量只能接受一次初始化,不能接受第二次,打个比方来说,我的名字叫小明,我就不允许别人再给我起其他的名字,(起了也不认那种)。示例如下:
1 #include <iostream>
2 using namespace std;
3 void func(){
4 static int a = 10;
5 a++;
6 cout<<a<<endl;
7 }
8 int main(){
9 func(); //初始化a为10,输出a为11
10 func(); //不接受初始化,a为11,输出a++,等于12
11 return 0;
12 }
register说明符
register,中文释义为“寄存器”,也就是寄存器类型,寄存器是计算机内距离CPU最近的一个容器,将变量定义在这个寄存器里面,能使得变量的提取更加快速,相应的会影响程序效率,使程序效率大大提高,然而缺点是,寄存器的空间十分的小,所以在使用寄存器类型的时候一定要慎重考虑。示例如下:
1 register int number = 0;
extern说明符
释义为“外部变量”,它属于变量声明,extern int n和int n的区别就是,前者告诉计算机,有一个int类型的变量n定义在其他地方,如果有调用请去其他文件中查找定义。示例如下:
1 #include <iostream>
2 using namespace std;
3 void func(){
4 extern int a = 10;
5 cout<<a<<endl;
6 }
7 int a;
8 int main(){
9
10 func();
11 return 0;
12 }