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