存储类用于定义 C++ 程序中变量和/或函数的生命周期和可见性。
生命周期是指变量保持活动的时间段,可见性是指可以访问变量的程序模块。
有五种存储类,可以在 C++ 程序中使用
Automatic
Register
Static
External
Mutable
存储类 | 关键词 | 寿命 | 能见度 | 初始值 |
---|---|---|---|---|
Automatic | auto | Function Block | Local | Garbage |
Register | register | Function Block | Local | Garbage |
Mutable | mutable | Class | Local | Garbage |
External | extern | Whole Program | Global | Zero |
Static | static | Whole Program | Local | Zero |
自动存储类
它是所有局部变量的默认存储类。auto 关键字自动应用于所有局部变量。
{ auto int y; float y = 3.45; }
上面的例子定义了两个具有相同存储类的变量,auto 只能在函数内部使用。
register 变量在寄存器中分配内存而不是 RAM。它的大小与寄存器大小相同。它比其他变量具有更快的访问速度。
建议仅将寄存器变量用于快速访问,例如在计数器中。
注意:我们无法获取寄存器变量的地址。
register int counter=0;
静态变量只初始化一次并且一直存在到程序结束。它在多个函数调用之间保留其值。
静态变量具有编译器提供的默认值 0。
#include <iostream> using namespace std; void func() { static int i=0; //静态变量 int j=0; //局部变量 i++; j++; cout<<"i=" << i<<" 与 j=" <<j<<endl; } int main() { func(); func(); func(); }
输出:
i= 1 与 j= 1 i= 2 与 j= 1 i= 3 与 j= 1
extern 变量对所有程序都是可见的。如果两个或多个文件共享相同的变量或函数,则使用它。
extern int counter=0;