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 }