C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域
,局部作用域
,语句作用域
,类作用域
,命名作用域
和文件作用域
。
从作用域看:
全局变量
具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。
静态局部变量
具有局部作用域。它只被初始化一次,自从第一次初始化直到程序结束都一直存在,即它的生命周期是程序运行就存在,程序结束就结束,
他和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。也就是在别的函数访问这个变量是错误的。
局部变量
也只有局部作用域,他是自动对象,他在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用结束后,变量就被撤销,其所占用的内存也被收回。
生命周期在函数结束后就结束了,作用域也仅限于该函数。
静态全局变量也具有全局作用域,他与全局变量的区别在于如果程序包含多个文件的话,他作用于定义它的文件里,不能作用到其他文件里,即被static关键字修饰过的变量具有文件作用域。
这样即使两个不同的源文件都定义了相同的静态全局变量
,他们也是不同的变量。