📅  最后修改于: 2023-12-03 14:59:51.385000             🧑  作者: Mango
在C++中,存储类是用来描述变量或函数的,它们决定了变量或函数的作用域和生命周期。
C++中有4种存储类:auto、register、static和extern。
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存储类用于声明寄存器变量,它用于请求编译器将变量存储在 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存储类用于声明静态变量,在函数内部声明静态变量时,它会保持它们的值,直到程序结束。在函数外部声明静态变量时,它们可以被其他文件所访问。
#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实例
// 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++中的存储类及其示例。