C++11中引入了lambda表达式,提供了一个匿名函数的简洁语法。lambda表达式是一个非常实用的C++新特性,它允许我们直接在代码中定义简单的函数对象。本文将通过示例介绍C++ lambda表达式的语法、用法和优势。
lambda表达式的语法
C++ lambda表达式的语法如下:
[capture](parameters) -> returnType { body }
其中,[]内是捕获子句,()内是参数列表,:后是返回值类型,{}内是函数体。下面是一个简单例子:
auto add = [](int a, int b) {
return a + b;
};
这个lambda表达式定义了一个接受两个int参数,返回它们和的函数对象。
捕获变量
lambda可以捕获作用域内的变量,例如:
int x = 1;
auto getX = [x] { return x; };
这个lambda表达式捕获了变量x,可以在函数体内继续使用它。
我们也可以通过引用捕获变量:
int x = 1;
auto addX = [&x](int y) {
x += y;
return x;
};
这个lambda通过引用捕获x,可以修改x的值。
lambda的应用
一个常见的lambda用法是和标准算法结合使用:
std::vector<int> nums{1,2,3,4};
int sum = 0;
std::for_each(nums.begin(), nums.end(), [&sum](int x) {
sum += x;
});
这个例子使用lambda作为for_each的参数,计算nums向量的总和。
lambda也非常适合作为回调函数:
btn.setOnClickListener([] {
//点击时运行的代码
});
lambda优势
相比普通函数,lambda表达式的优势在于:
- 简洁方便,可以直接内联,避免定义单独的函数
- 可以捕获作用域内的变量
- 类型推导,简化代码
- 作为函数对象使用更加灵活
综上所述,C++11的lambda表达式让函数对象的创建更简单直观。它是函数式编程在C++中的重要实现,非常实用。掌握lambda表达式可以帮助我们减少代码量,写出更优雅简洁的C++程序。