C++类型限定符简介
类型限定符如const、volatile修饰变量,控制访问权限和优化,保证程序行为可预测。
C++类型限定符简介
C++类型限定符简介
1. 严格意义的类型限定符(Type Qualifiers)
这些直接限定类型的行为,是最正统的“类型限定符”:
限定符 | 说明 |
---|---|
const | 不可修改,编译期常量或修饰函数签名(如 const int* ) |
volatile | 禁止优化,值可能由外部(如硬件)改变 |
mutable | 允许 const 成员函数中修改此成员变量 |
restrict | C++ 尚未标准支持,GCC/Clang 有扩展(类似 C99) |
constexpr | C++11 起,编译期常量 |
2. 与类型/作用域密切相关的修饰符(存储类/函数限定符)
这些虽不属于传统“类型限定符”,但也改变类型/生命周期行为,常混用:
关键字 | 类别 | 说明 |
---|---|---|
static | 存储类 | 静态生命周期,函数内变量持久存在;类内不依赖实例 |
extern | 存储类 | 引用外部符号(如头文件声明变量) |
register | 存储类(已废弃) | 建议放入寄存器(现代编译器忽略) |
thread_local | 存储类(C++11) | 每个线程一份变量 |
inline | 函数限定符 | 建议编译器内联函数 |
virtual | 函数限定符 | 表示支持多态 |
explicit | 构造函数限定符 | 禁止隐式转换 |
friend | 访问控制 | 允许访问类的私有成员 |
noexcept | 异常限定符(C++11) | 表示函数不会抛出异常 |
final | 类/虚函数限定符 | 表示不能被继承/重写 |
override | 虚函数限定符 | 表示重写父类虚函数 |
3. 用于类型推导/模板相关的修饰符(现代 C++)
关键字 | C++版本 | 说明 |
---|---|---|
auto | C++11+ | 自动类型推导 |
decltype | C++11+ | 推导表达式的类型 |
consteval | C++20 | 编译期求值函数 |
constinit | C++20 | 编译期初始化全局/静态变量,但不是 constexpr |
本文由作者按照 CC BY 4.0 进行授权