📜  C++中的存储类(1)

📅  最后修改于: 2023-12-03 14:39:58.310000             🧑  作者: Mango

C++中的存储类

C++中的存储类用于指定定义变量时它们的作用域和生存期,包括下列四种存储类:

  1. 自动存储类(auto)
  2. 静态存储类(static)
  3. 寄存器存储类(register)
  4. 外部存储类(extern)
auto存储类

auto存储类定义的变量在函数内部定义并且自动释放该变量的内存空间。如果定义了变量但没有初始化,则变量的值是未知的。auto存储类是C++中默认的存储类,因此变量不能返回到函数外部。auto关键字常用于函数的参数列表中,用于指示编译器推断变量的类型。

void myFunction()
{
  int x; // 自动存储类

  x = 1;

  cout << "x的值为:" << x << endl;
}
static存储类

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存储类

register存储类用于定义存储在CPU寄存器中的局部变量。这样做是为了更好地优化代码,因为寄存器存取数据比存储器快得多。但是,由于寄存器的数量有限,因此register存储类不适用于所有变量。如果在register存储类中定义了太多变量,则编译器可能忽略某些定义并报告警告。

void myFunction()
{
  register int x = 100; // 寄存器存储类

  cout << "x的值为:" << x << endl;
}

int main()
{
  myFunction();

  return 0;
}
extern存储类

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++中的存储类提供了一些有用的特性,可用于控制变量的作用域和生存期。开发人员可以根据需要选择最合适的存储类。