C++ 语法糖在编译期完成转换,运行期无开销。所有语法糖都能还原为 C++98 原生代码。
核心高频语法糖(C++11 起)
| 语法糖 | 示例 | 等价代码 |
|---|
| auto | auto a = 10; | int a = 10; |
| 范围 for | for(int x : vec) | 迭代器遍历 |
| nullptr | int *p = nullptr; | (void*)0 |
| 算术运算符 | a += b | a = a + b |
| Lambda | [](int x){return x*2;} | 匿名仿函数类 |
| 初始化列表 | vector<int> v{1,2,3}; | 三次 push_back |
C++11 语法糖
| 语法糖 | 示例 | 说明 |
|---|
| 右值引用 | string s = std::move(s1); | 接管内存,避免拷贝 |
| using 别名 | using IntVec = vector<int>; | 比 typedef 更灵活 |
| default/delete | func() = default; | 简化构造控制 |
C++14/17 语法糖
| 语法糖 | 示例 | 说明 |
|---|
| decltype | decltype(a+b) c; | 编译器推导类型 |
| 结构化绑定 | auto [x,y] = pair{1,2}; | 解构元组 |
| if 初始化 | if(int a=10; a>5) | 变量作用域限 if 内 |
| 折叠表达式 | (args + ...) | 简化可变参数模板 |
经典语法糖
| 语法糖 | 示例 | 说明 |
|---|
| 引用 | int &b = a; | 等价 int *const b |
| 函数重载 | func(int)/func(double) | 编译器生成不同函数名 |
| 模板 | vector<int> | 编译器生成类型代码 |
示例
1
2
3
4
5
6
7
8
9
10
| // auto + 范围 for
for (auto& x : vec) {
x *= 2;
}
// Lambda
auto f = [](int x) { return x * 2; };
// 结构化绑定
auto [x, y] = std::make_pair(1, 2);
|
Comments