C++ 存储类
C++ 存储类是用来指定变量和函数的作用域(可见性)和生命周期的特殊关键字。在 C++ 中,有四个关键字用于控制存储类别,分别是 auto、register、static 和 extern。
auto
存储类
auto
存储类定义了一个变量的自动存储。这意味着该变量只有在定义它的函数执行期间才存在。一旦函数执行完毕,该变量就会被销毁。
示例代码:
void someFunction() {
auto int a = 5;
cout << a << endl;
}
int main() {
someFunction();
return 0;
}
在上面的代码中,变量 a
的作用域被限制在函数 someFunction()
中,只有在函数执行期间才存在。
register
存储类
register
存储类定义了一个变量的寄存器存储。这意味着该变量被存储在处理器的寄存器中,而不是内存中。这样可以提高变量的访问速度,但是寄存器的数量是有限的。
示例代码:
void someFunction() {
register int a = 5;
cout << a << endl;
}
int main() {
someFunction();
return 0;
}
在上面的代码中,变量 a
被定义为寄存器存储类型,这样就可以从处理器的寄存器中访问它,提高代码效率。
static
存储类
static
存储类定义了一个变量的静态存储。这意味着该变量在程序声明周期内存在,而不是在定义它的块作用域内。如果一个变量被声明为静态存储类型,则它只会被初始化一次,即使执行了多次定义语句。
示例代码:
void someFunction() {
static int a = 0;
cout << a << endl;
a++;
}
int main() {
someFunction(); // output: 0
someFunction(); // output: 1
someFunction(); // output: 2
return 0;
}
在上面的代码中,变量 a
被定义为静态存储类型,每次调用函数时都会累加,但是其值在整个程序生命周期中只会被初始化一次。
extern
存储类
extern
存储类用于提供一个全局变量的引用,对于多个文件共享变量时非常有用。外部变量可以在一个文件中定义和初始化,在另一个文件中声明,然后可以在两个文件中都使用。
示例代码:
文件1:
// file1.cpp
#include <iostream>
using namespace std;
int count; // 全局变量
extern void write_extern();
int main() {
count = 5;
write_extern();
return 0;
}
文件2:
// file2.cpp
#include <iostream>
using namespace std;
extern int count;
void write_extern(void) {
cout << "Count is " << count << endl;
}
在上面的代码中,文件2中的全局变量 count
在文件1中进行了初始化,但在文件2中仅进行了声明和引用。在文件1中调用了文件2中声明的函数,输出了变量 count
的值。
总结:
C++ 存储类可以帮助我们在不同的场景下控制变量的作用域和生命周期,同时可以提高程序的效率和优化内存管理。当我们需要存储全局变量或共享变量时,static
和 extern
存储类非常有用;当我们需要提高变量的访问速度时,register
存储类可以帮助我们实现这一目标;当我们需要在函数中控制变量的作用域和生命周期时,auto
存储类是个好选择。