目录
1. const:定义常量
2. volatile:易变性修饰
3. restrict(C++非标准)
4. mutable:突破常量性
5. static:静态存储
6. register(已弃用)
分类修正说明
1. const
:定义常量
含义:变量值不可修改,必须初始化。
应用场景:常量、函数参数、返回值、成员函数(表示不修改对象状态)。
const int MAX = 100;
// MAX = 200; // 错误:无法修改常量void print(const int* ptr)
{ // ptr指向的值不可修改std::cout << *ptr;
}
2. volatile
:易变性修饰
含义:变量可能被外部因素(硬件、多线程)修改,禁止编译器优化。
应用场景:硬件寄存器、多线程共享变量。
volatile bool sensorTriggered = false;// 假设sensorTriggered可能由中断服务程序修改
while (!sensorTriggered)
{ // 每次循环都从内存读取值// 等待传感器触发
}
3. restrict
(C++非标准)
含义:指针是访问数据的唯一方式(C99特性,C++需编译器扩展)。
注意:C++标准不支持,但GCC/Clang支持__restrict
。
// 使用GCC扩展
void add(int* __restrict a, int* __restrict b, int n)
{for (int i=0; i<n; i++) a[i] += b[i]; // 编译器可优化无指针重叠
}
4. mutable
:突破常量性
含义:允许在const
成员函数或对象中修改该成员。
应用场景:缓存、调试计数等。
class Logger{mutable int logCount = 0; // mutable成员public:void log() const {logCount++; // 允许在const函数中修改}
};
5. static
:静态存储
含义:
-
函数内:变量生命周期为程序全程,作用域仍局部。
-
类中:成员属于类而非实例。
-
文件作用域:变量仅在当前文件可见(C++中更推荐匿名命名空间)。
// 函数内的static变量
void counter()
{static int count = 0; // 只初始化一次count++;std::cout << count << "\n";
}// 类中的static成员
class MyClass
{public:static int sharedVar; // 声明
};
int MyClass::sharedVar = 42; // 定义// 文件作用域的static变量(C++中可用匿名命名空间替代)
namespace
{int fileLocalVar = 100; // 内部链接
}
6. register
(已弃用)
含义:建议编译器将变量存入寄存器(现代编译器自动优化,C++17起弃用)。
示例:
// 传统用法(实际可能被编译器忽略)
void loop()
{register int i; // 建议寄存器存储for (i=0; i<10000; i++){// 频繁操作}
}
分类修正说明
严格来说,C++中:
-
类型限定符:
const
、volatile
(影响类型属性)。 -
存储类说明符:
static
、register
、mutable
(影响存储方式或生命周期)。 -
restrict
:C语言特性,C++需依赖编译器扩展。