C++11新特性之lambda表达式
1.介绍
C++11引入了lambda表达式。lambda表达式提供一种简洁的方式来定义匿名函数对象,使得在需要临时定义一个函数时非常方便。
2.lambda表达式用法
lambda表达式的基本用法为:
[捕获列表](参数列表)->返回类型
{
函数体
};
捕获列表:指定lambda表达式可以访问那些外部变量,以及以哪种方式访问。下面列举常用的几种格式。
(1)[ ]——空括号表示不导入任何外部变量。
(2)[ = ]—— 以值传递的方式导入所有外部变量。(常用)
(3)[ & ]——以引用传递的方式导入所有外部变量。(常用)
(4)[val1, val2...]——以值传递的方式导入val1,val2等指定变量。
(5)[&val1, &val2...]——以引用传递的方式导入val1,val2等指定变量。
(6)[val1, &val2...]——以值传递的方式导入val1,引用传递的方式导入val2。(两种方式可以混合使用)
(7)[ this ]——以值传递的方式导入当前的this指针。
在一般使用中可以直接使用(2)与(3),简单并且不容易出错。
参数列表:传递给lambda表达式的参数。
返回类型:显式指定lambda表达式的返回类型。(这部分可以省略不写)。
函数体:lambda表达式执行的代码。
例一:
#include <iostream>
int main() {
auto add = [](int a, int b){
return a + b;
};
int result = add(10, 20);
std::cout << "Result: " << result << std::endl;
return 0;
}
例二:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int num[4] = {4, 2, 3, 1};
//对 a 数组中的元素进行排序
sort(num, num+4, [=](int x, int y) -> bool{ return x < y; } );
for(int n : num){
cout << n << " ";
}
return 0;
}
3.总结
优点:
lambda表达式使C++编程更加灵活,尤其在处理临时函数与回调函数时非常方便。
注意事项:
(1)生命周期:确保lambda引用的变量是有效的,否则可能导致未定义错误。
(2)性能问题:值传递会复制外部变量的值,产生额外的性能开销。如果不需要修改外部的值,建议使用引用传递。