在 C++11 标准中引入了 lambda 表达式
例如:
auto cmp = [](const ListNode *a, const ListNode *b) {
return a->val > b->val;
};
这里定义了一个名为 cmp
的变量,使用 auto
关键字让编译器自动推断其类型。这个变量实际上是一个可调用对象(在这种情况下,类似于函数指针或函数对象)
在 C++ 中,auto cmp = [](const ListNode *a, const ListNode *b) { return a->val > b->val; };
这里的方括号[]
具有以下重要作用:
一、捕获列表
- 空捕获列表:在这个例子中,方括号内为空,表示这个 lambda 表达式不捕获任何外部变量。如果需要捕获外部变量,可以在方括号内指定捕获方式,例如
[&]
表示按引用捕获所有外部变量,[=]
表示按值捕获所有外部变量,[x,y]
表示按值捕获变量x
和y
等。
二、定义 lambda 表达式的语法要求
-
标识 lambda 表达式:方括号是 C++ 中定义 lambda 表达式的一部分语法结构。它明确地告诉编译器,接下来的代码是一个 lambda 表达式,而不是一个普通的函数。
-
与函数对象区分:没有方括号的话,编译器可能会将其误认为是一个普通的函数声明或其他语法结构。方括号帮助编译器准确地识别这是一个 lambda 表达式,并且可以根据其特性进行相应的处理,例如自动推断类型、支持闭包等。