C++ 存储类学习笔记

C++ 中的存储类指的是变量或函数在程序运行时的内存分配方式,它们可以用来控制变量的作用域和生命周期,以及变量在内存中的位置。C++ 中有四种存储类:auto、register、static 和 extern。

auto 存储类

  • auto 变量是在程序块中声明的局部变量的默认存储类别。这意味着,如果没有其他的存储类别关键字,如 static 或 extern,那么该变量就会被自动地分配为 auto 变量。

  • auto 变量的作用域仅限于该程序块,在离开该程序块后,其内存将被释放。

  • 示例:

    c++Copy Code
    #include <iostream> using namespace std; int main() { auto int i = 5; // auto 可以省略 cout << i << endl; return 0; }

register 存储类

  • register 变量是使用寄存器存储的局部变量,这意味着它们的访问速度非常快。

  • register 关键字只是给编译器一个提示,告诉它将变量存储在寄存器中,但并不一定会生效,因为寄存器的数量是有限的。

  • register 变量的作用域仅限于该程序块,在离开该程序块后,其内存将被释放。

  • 示例:

    c++Copy Code
    #include <iostream> using namespace std; int main() { register int i = 5; cout << i << endl; return 0; }

static 存储类

  • static 变量是在程序初始时分配内存,并一直存在,直到程序结束才被释放。因此,static 变量的作用域可以跨越多个程序块。

  • static 变量在第一次声明时初始化,即使它所在的程序块没有运行到,也会被初始化为默认值(0 或 NULL)。

  • 示例:

    c++Copy Code
    #include <iostream> using namespace std; void func() { static int count = 0; // 只会声明一次,然后在下一次调用时继续使用 count++; cout << count << endl; } int main() { func(); func(); func(); return 0; } // 输出:1 2 3

extern 存储类

  • extern 变量指向一个已经定义过的全局变量,它通常用于在一个文件中访问另一个文件中定义的全局变量。

  • 在使用 extern 声明变量时,只是声明这个变量,而不是定义它;变量的实际定义必须在另一个文件中进行。

  • 示例:

    c++Copy Code
    // 文件 a.cpp #include <iostream> using namespace std; int count = 5; void func() { extern int count; // 声明已经在其他文件中定义的全局变量 cout << count << endl; } int main() { func(); return 0; } // 输出:5 // 文件 b.cpp #include <iostream> using namespace std; extern int count; // 声明已经在其他文件中定义的全局变量 void func() { cout << count << endl; } int main() { func(); return 0; } // 输出:5

以上是 C++ 中的存储类,它们可以用来控制变量的作用域和生命周期,以及变量在内存中的位置。使用恰当的存储类可以提高程序的效率和安全性。