公司动态

C++ [ lambda 表达式 ]

📅 2026/9/2 12:37:28
C++ [ lambda 表达式 ]
lambda 表达式语法C++11 引入了 lambda 表达式,这是一种简洁的匿名函数定义方式,可以方便地在代码中创建小型的、一次性的函数。以下是 C++ 中 lambda 表达式的一些基本语法:lambda表达式本质是⼀个匿名函数对象(是对象,不是函数),跟普通函数不同的是他可以定义在函数内部(当然也可以定义在全局或者类里面)。lambda表达式语法使⽤层⽽⾔没有类型,所以我们⼀般是⽤auto或者模板参数定义的对象去接收lambda对象(底层才有类型)// 模板函数,参数类型为模板参数 T template typename T void func(T lambda) { lambda(); // 调用 lambda 表达式 } int main() { // lambda 表达式的类型是匿名的 auto lambda = []{ cout "hello" endl; }; // 模板参数 T 会自动推导为 lambda 的匿名类型 func(lambda); // 正确:用模板参数定义的参数接收 lambda return 0; }表达式格式:[]() - 返回类型 { 函数体 }[]表示捕获列表(capture - list),用于指定 lambda 表达式内部可以访问的外部变量。(捕捉列表,该列表总是出现在 lambda 函数的开始位置,编译器根据 [ ] 来判断接下来的代码是否为 lambda 函数,捕捉列表能够捕捉上下⽂中的变量供 lambda 函数使⽤,捕捉列表可以传值和传引⽤捕捉,捕捉列表为空也不能省略。)()表示参数列表(parameters),可以为空,也可以包含参数。(与普通函数的参数列表功能类似,如果不需要参数传递,则可以连同()⼀起省略)-后面跟着返回类型(return type)。返回值类型,⽤追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可省略。⼀般返回值类型明确情况下,也可省略,由编译器对返回类型进⾏推导。{}函数体(function boby),函数体内的实现跟普通函数完全类似,在该函数体内,除了可以使⽤其参数外,还可以使⽤所有捕获到的变量,函数体为空也不能省略。简单的 lambda 表达式:int main() { //lambda表达式,add1是一个匿名函数对象,是函数对象,不是函数 //类型不认识,语法上来说,编译器自动推导 //捕获列表+参数列表+返回类型+函数体 auto add1 = [](int x, int y)-int {return x + y; }; cout add1(1, 2) endl; return 0; }注意事项:为空/可省略问题示例:// 1、捕捉为空也不能省略,保留 [ ] // 2、参数为空可以省略,可省略 ( ) // 3、返回值