📜  C++中的存储类及其示例(1)

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

C++中的存储类及其示例

在C++中,存储类是用来描述变量或函数的,它们决定了变量或函数的作用域和生命周期。

C++中有4种存储类:auto、register、static和extern。

auto存储类

auto存储类是默认的存储类,也是最常见的存储类。

auto关键字用于声明自动变量,它必须在块作用域中声明,并且会在块作用域结束时被销毁。在函数内部声明的自动变量,默认情况下,它们的值是未定义的。在函数外部声明的自动变量,默认情况下,它们的值为0。

#include <iostream>
 
int main () {
   int a = 10;
 
   {
      auto int a = 50; // 声明内部作用域的自动变量
      std::cout << "Inner a = " << a << std::endl; // 输出50
   }
 
   std::cout << "Outer a = " << a << std::endl; // 输出10
 
   return 0;
}
register存储类

register存储类用于声明寄存器变量,它用于请求编译器将变量存储在 CPU 寄存器中,以提高访问变量的速度。

register必须在函数内声明,它不能有一个指针类型和一个浮点类型。因为寄存器的数量非常有限,有时候,即使声明了register变量,它也可能不会被分配到寄存器中,因为寄存器已经满了。

#include <iostream>
 
int main () {
   register int a; // 定义寄存器变量
   for (int i = 0; i < 10000000; i++) {
      a++;
   }
   std::cout << "a = " << a << std::endl;
 
   return 0;
}
static存储类

static存储类用于声明静态变量,在函数内部声明静态变量时,它会保持它们的值,直到程序结束。在函数外部声明静态变量时,它们可以被其他文件所访问。

#include <iostream>
 
void func () {
   static int a = 0; // 静态局部变量
   std::cout << "a = " << ++a << std::endl;
}
 
int main () {
   for (int i = 0; i < 5; i++) {
      func();
   }
 
   return 0;
}

输出结果为:

a = 1
a = 2
a = 3
a = 4
a = 5
extern存储类

extern存储类用于声明一个变量,它是在程序的另一个文件中定义的,在当前文件中使用。extern可以用于定义全局变量和函数,它指示编译器变量在其他文件中已经定义。

// extern实例
// file1.cpp
#include <iostream>
 
int count ;
extern void write_extern();
 
int main() {
   count = 5;
   write_extern();
 
   return 0;
}
// file2.cpp
#include <iostream>
 
extern int count;
 
void write_extern(void) {
   std::cout << "Count is " << count << std::endl;
}

输出结果为:

Count is 5

以上就是C++中的存储类及其示例。