存储类型和作用域、生存期限、链接类型有着千丝万缕的联系。
存储类型一共有四种 :
extern static 为两个永久存储类型
auto register 为两个临时存储类型 (只有变量才有临时生存期限)
默认的全局变量和全局函数为extern存储类型
显示的声明全局变量和全局函数使其具有static存储类型,它们只能被同一个编译单元所调用
局部变量默认具有auto存储类型,即便将其用static 或者 register来定义它们的作用域都是程序块作用域,链接类型都是内连接,在用时创建在不用后销毁,register 和 auto只能用来声明局部变量和局部常量
全局常量默认为static存储类型
局部符号常量为auto存储类型
用register修饰的变量会被直接加载到CPU寄存器中,可以避免在寄存器和内存之间频繁交换,提高程序运行效率,一般不需要程序员显示地调用register说明符。
C++有6种作用域类型 文件、函数、程序块、函数原型、类、命名空间。
局部变量具有程序块作用域而不具有函数作用域
当发生屏蔽全局变量的时候,可以用一元作用域解析运算符::来引用全局变量 ep: ::count++;
在任何函数、类定义和名字空间外定义的标识符具有文件作用域,包括函数定义、类型定义本身。