存储类有哪些

本文深入探讨C++中auto、register、static和extern四种存储类的特性和使用场景,包括编译器类型推导、寄存器存储、静态变量生命周期及外部变量链接等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

auto 存储类(Storage Class)

auto是c++11以后的新特性,编译器可以自行推导数据类型,这一切都是编译器的功劳

auto PI = 3.14; //double
auto msg("hello"); // const char*
auto val = new auto(9); // int*

auto x1 = 5, x2 = 5.0, x3 = 'r'; // 错误,必须初始化为同一类型

register 存储类

  • register 定义存储在寄存器而不是内存中的局部变量(但也仅仅是)希望而已,是否会实现,取决于编译器最终的判断和抉择。
  • Best Practice:主要是为了性能优化。注意,不要过早优化。
  • 不要因为C++可以做什么就做什么!
register int res;

各个存储器速度快慢排序:
register > cache > memory > disk > network

static 存储类

  • 指示编译器在程序的声明周期内保持局部变量的存在,而不需要在每次它进入或离开作用域时进行创建或销毁
  • 使用static修饰局部变量可以在函数调用之间保持局部变量的值
  • static修饰符也可以用于全局变量。当static修饰全局变量时,会使变量的作用域限制在声明它的文件内(C语言的遗传)。

其实这也很好理解, 想想它的内存意义即可明白。对比Java用static修饰的成员属性和成员方法,则这些属性或方法就变成类成员属性、类成员方法,在程序运行时,全局只有一份,并一直存在。

extern 存储类

extern 存储类告诉编译器这个变量在别的地方被定义了
编译最后的一步链接的时候可以找到

// a.cpp
int count;
extern void write_extern();

int main()
{
	count = 5;
	write_extern();
}
// b.cpp
extern int count;

void write_extern()
{
	std::cout << "Count is " << count << std::endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值