【C++】普通全局变量、静态全局变量、普通局部变量与静态局部变量

1.普通全局变量

​ 普通全局变量是定义在函数和类外的或由extern标识或直接定义没有static标识的变量。

​ 各个类型的变量之间最主要的区别就是作用域的不同了,普通全局变量的作用域在整个源程序中,全局变量对整个源程序中都是可见的,无论源程序是由单个文件还是多个文件组成,普通全局变量具有external链接属性,所以普通全局变量在整个源程序的各个文件中都可以被引用。

2.静态全局变量

​ 静态全局变量是定义在函数和类外的由static标识的变量。

​ 静态全局变量具有文件作用域,具有internal链接属性,只能在定义的文件中使用,在其他文件中可以定义同名的变量,而全局变量则不行,这里要注意静态全局变量与类静态全局变量是不同的,类静态全局变量受到类权限限制,不同的访问权限就之间决定了类静态全局变量的作用域,类全局变量的使用与类一致,能使用类的地方就能使用类全局变量。

​ 关于普通全局变量和静态全局变量的区别,我一直没有弄得很清楚,我有在网上查阅很多bolg,大家的说法都出奇的一致,我上面写的也是在查阅很多blog后总结的,但是我实际测试时,普通全局变量和静态全局变量似乎都可以被其他文件使用,并且 在其他文件中定义静态全局变量似乎也没有报错,没有弄明白这个其他文件指的是什么文件。

3.普通局部变量

​ 普通局部变量是定义在函数内的没有static标识的变量。

​ 普通局部变量具有块作用域,生命周期从定义开始到跳出函数结束,普通局部变量每次使用都会初始化一次。

4.静态局部变量

​ 静态局部变量的作用于和普通局部变量一致,但是静态局部变量的内存地址在函数结束后不会被销毁,且会保存赋值结果,静态局部变量和静态全局变量一样会一直驻留在静态区,静态局部变量只会初始化一次,在下一次函数被调用时不会再初始化而是直接调用。