C ++中变量的存储类别是什么?

存储类定义C ++程序中变量和/或函数的范围(可见性)和生存期。这些说明符位于它们修改的类型之前。有以下存储类,可以在C ++程序中使用。

  • 汽车

  • 寄存器

  • 静态的

  • 外部

  • 易变的

在C中,自动存储类说明符使您可以显式声明具有自动存储的变量。自动存储类是在块内声明的变量的默认值。当声明了x的块退出时,将删除具有自动存储的变量x。

您只能将自动存储类说明符应用于在块中声明的变量名称或函数参数名称。但是,这些名称默认情况下会自动存储。因此,存储类说明符auto通常在数据声明中是多余的。

它最初仅出于语法兼容性而被转移到C ++,尽管后来它具有自己的含义,即自动类型推断。

在C中,寄存器存储类说明符向编译器指示该对象应存储在机器寄存器中。通常为频繁使用的变量(例如循环控制变量)指定寄存器存储类说明符,以期通过最大程度地减少访问时间来提高性能。但是,不需要编译器满足此请求。由于大多数系统上可用的寄存器的大小和数量有限,因此实际上几乎没有变量可以放入寄存器中。

静态存储类指示编译器在程序的生存期内保留局部变量,而不是在每次进入和超出范围时都创建并销毁它。因此,将局部变量设为静态允许它们在函数调用之间保持其值。

使用外部存储类说明符,可以声明多个源文件可以使用的对象。extern声明使所描述的变量在当前源文件的后续部分中可用。此声明不替代定义。该声明用于描述外部定义的变量。

可变存储类说明符仅用于类数据成员,以使其可修改,即使该成员是声明为const的对象的一部分也是如此。您不能将可变说明符与声明为static或const或引用成员的名称一起使用。

 例

class A
{
   public:
   A() : x(4), y(5) { };
   mutable int x;
   int y;
};

int main(){
   const A var2;
   var2.x = 345;
   //var2.y = 2345; 
}

编译器不允许分配var2.y = 2345,因为var2已声明为const。编译器将允许赋值var2.x = 345,因为A::x已被声明为可变的。