C++中 auto,static,register,extern的作用

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 }

猜你喜欢

转载自www.cnblogs.com/whtmomo/p/11299413.html