亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++存储类别全解析:auto/register/static/extern/mutable作用域与生命周期

存储类别定义变量/函数的作用域(可见性)与生命周期。说明符置于类型之前。C++提供五种存储类别:

auto存储类别

所有局部变量的默认存储类别。仅限函数内部使用。示例:

{ int mount; auto int month; } // 两者等价,均为auto

register存储类别

建议将局部变量存入CPU寄存器而非内存,适用于频繁访问的计数器等热点变量。特性:

{ register int miles; }

static存储类别

核心特性:延长局部变量生命周期至程序全周期,不随函数进出而创建/销毁,保持值在调用间持久。两大用法:

演示:局部静态i与全局静态count交互

#include <iostream>
void func(void);
static int count = 10; // 全局静态,文件内可见
int main() {
    while(count--) func();
    return 0;
}
void func(void) {
    static int i = 5; // 局部静态,跨调用保持
    i++;
    std::cout << "i is " << i;
    std::cout << " and count is " << count << std::endl;
}

输出:i从6增至15,count从9降至0。

extern存储类别

跨文件共享全局变量/函数的关键。extern声明不分配存储,仅引用已在别处定义的存储位置,不可初始化。典型双文件协作模式:

文件1:main.cpp

#include <iostream>
int count;               // 定义(分配存储)
extern void write_extern(); // 声明函数
int main() {
    count = 5;
    write_extern();
}

文件2:support.cpp

#include <iostream>
extern int count;        // 引用main.cpp的count
void write_extern(void) {
    std::cout << "Count is " << count << std::endl;
}

编译链接:g++ main.cpp support.cpp -o write,运行./write输出5。

mutable存储类别

仅适用于类对象成员。允许const成员函数修改该成员,打破“const承诺不修改任何成员”的限制。详见后续类章节。

C语言

  1. 掌握 C++ 运算符:六大类型全解析与实战示例
  2. C++类与对象:面向对象编程实战指南
  3. C++ 友元函数与友元类:突破访问控制的利器
  4. C++ 类模板实战指南:编写灵活的类型无关代码
  5. C 语言存储类完全解析:auto、extern、static、register
  6. C 语言存储类详解:作用域、生命周期与四大类型实战
  7. C++多态实战指南:虚函数、动态绑定与纯虚函数
  8. C++数据抽象实战:接口与实现分离的设计艺术
  9. C++数据封装:守护代码安全的核心机制
  10. C++接口编程:抽象类与纯虚函数实现规范契约
  11. C# 类完全指南:定义、封装、构造函数、析构函数与静态成员
  12. C# 继承完全指南:基类、派生类、初始化与多重继承替代方案