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