📅  最后修改于: 2023-12-03 14:39:58.310000             🧑  作者: Mango
C++中的存储类用于指定定义变量时它们的作用域和生存期,包括下列四种存储类:
auto存储类定义的变量在函数内部定义并且自动释放该变量的内存空间。如果定义了变量但没有初始化,则变量的值是未知的。auto存储类是C++中默认的存储类,因此变量不能返回到函数外部。auto关键字常用于函数的参数列表中,用于指示编译器推断变量的类型。
void myFunction()
{
int x; // 自动存储类
x = 1;
cout << "x的值为:" << x << endl;
}
static存储类定义的变量具有静态生命周期,它们在程序的整个生命周期内保持不变。如果定义了变量但没有初始化,则变量的初值为0。静态变量是在函数外部定义的,因此它们可以在函数内部和外部访问。如果在函数内部使用static存储类,则变量的作用域只限于该函数。如果在函数外部使用,则变量的作用域全局可见。
void myFunction()
{
static int x; // 静态存储类
x++;
cout << "x的值为:" << x << endl;
}
int main()
{
for (int i = 0; i < 5; i++)
{
myFunction();
}
return 0;
}
register存储类用于定义存储在CPU寄存器中的局部变量。这样做是为了更好地优化代码,因为寄存器存取数据比存储器快得多。但是,由于寄存器的数量有限,因此register存储类不适用于所有变量。如果在register存储类中定义了太多变量,则编译器可能忽略某些定义并报告警告。
void myFunction()
{
register int x = 100; // 寄存器存储类
cout << "x的值为:" << x << endl;
}
int main()
{
myFunction();
return 0;
}
extern存储类用于定义在函数外部或在其他文件中定义的全局变量。在定义全局变量时,extern关键字可以省略。但是,在使用其他文件中定义的全局变量时,必须使用extern关键字。在使用extern存储类时,变量的值可以在其他文件中定义和修改,这对于大型程序来说非常有用。
// File 1
extern int x;
void myFunction()
{
cout << "x的值为:" << x << endl;
}
// File 2
int x = 100;
int main()
{
myFunction();
return 0;
}
总之,C++中的存储类提供了一些有用的特性,可用于控制变量的作用域和生存期。开发人员可以根据需要选择最合适的存储类。