以下是 C++ 中常用关键字的分类总结,按功能领域分组:
一、数据类型定义
| 关键字 |
作用 |
int |
声明整型变量(通常4字节) |
double |
声明双精度浮点类型(8字节) |
char |
声明字符类型(1字节) |
bool |
声明布尔类型(true/false) |
void |
表示"无类型"(函数返回值/无参函数/泛型指针) |
auto |
自动类型推导(C++11起) |
decltype |
获取表达式类型(C++11) |
示例:
auto num = 42; // 推导为 int
decltype(num) count = 10;
二、类型修饰符
| 关键字 |
作用 |
const |
定义常量(不可修改) |
constexpr |
定义编译期常量(C++11) |
volatile |
防止编译器优化(用于硬件寄存器等) |
mutable |
允许在const成员函数中修改成员变量 |
signed |
声明有符号类型(默认) |
unsigned |
声明无符号类型 |
示例:
constexpr int MAX = 100; // 编译期常量
volatile bool flag = true; // 易变对象
三、流程控制
| 分支控制 |
循环控制 |
跳转控制 |
if/else |
for |
break |
switch |
while |
continue |
case |
do/while |
return |
default |
range-for |
goto(不推荐) |
? :(三元运算符) |
|
|
range-for示例:
for (auto& num : {1,2,3}) { // C++11范围循环
cout << num << " ";
}
四、存储类别
| 关键字 |
作用 |
static |
静态变量(程序生命周期)/ 类静态成员 |
extern |
声明外部定义的变量/函数 |
thread_local |
线程局部存储(C++11) |
register |
建议编译器将变量放入寄存器(C++17起弃用) |
mutable |
允许const成员函数修改的成员 |
五、面向对象
| 类别 |
关键字 |
作用 |
| 类定义 |
class / struct / union |
定义类/结构体/联合体 |
| 访问控制 |
public / protected / private |
访问权限控制 |
| 继承 |
virtual / override / final |
虚函数/显式覆盖/禁止覆盖(C++11) |
| 多态 |
dynamic_cast / typeid |
运行时类型识别(RTTI) |
| 构造/析构 |
new / delete |
动态内存管理 |
| 特殊成员 |
this / operator / friend |
当前对象指针/运算符重载/友元声明 |
示例:
class Base {
public:
virtual void foo() final {} // 禁止覆盖
};
class Derived : public Base {
public:
void bar() override {} // 显式覆盖
};
六、异常处理
| 关键字 |
作用 |
try |
异常检测代码块 |
catch |
异常捕获 |
throw |
抛出异常 |
noexcept |
声明函数不抛出异常(C++11) |
七、模板编程
| 关键字 |
作用 |
template |
定义函数/类模板 |
typename |
声明模板类型参数(可替代class) |
requires |
概念约束(C++20) |
示例:
template<typename T>
requires std::integral<T> // C++20概念
T add(T a, T b) {
return a + b;
}
八、内存模型
| 关键字 |
作用 |
alignas |
指定内存对齐要求(C++11) |
alignof |
获取类型对齐值(C++11) |
九、其他重要关键字
| 关键字 |
作用 |
namespace |
定义命名空间(防止命名冲突) |
using |
使用命名空间/类型别名 |
enum / enum class |
定义枚举类型(C++11强类型枚举更安全) |
explicit |
禁止隐式构造函数转换 |
sizeof |
获取类型/对象大小 |
asm |
内联汇编(平台相关) |
module |
模块声明(C++20模块系统) |
✨ 关键特性说明
-
const vs constexpr
const:运行时常量
constexpr:编译期可计算的常量(强制编译器优化)
-
override与final
- 显式声明覆盖关系(增强代码可读性)
- 阻止类继承或虚函数覆盖
-
noexcept优化
void foo() noexcept; // 承诺不抛异常
- 允许编译器进行深度优化
- 违反时会直接调用
std::terminate()
-
C++20概念约束
template<std::floating_point T> // 预定义概念
T sqrt(T val) { ... }
最佳实践建议:
- 优先使用
nullptr替代NULL
- 用
constexpr取代宏常量
- 面向对象设计使用
override/final
- 资源管理使用RAII模式而非手动
new/delete