张芷铭的个人博客

C++ 语法糖在编译期完成转换,运行期无开销。所有语法糖都能还原为 C++98 原生代码。

核心高频语法糖(C++11 起)

语法糖示例等价代码
autoauto a = 10;int a = 10;
范围 forfor(int x : vec)迭代器遍历
nullptrint *p = nullptr;(void*)0
算术运算符a += ba = 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/deletefunc() = default;简化构造控制

C++14/17 语法糖

语法糖示例说明
decltypedecltype(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