C++11中的匿名函数lambda用法

C++11中引用了匿名函数这一个新的特性,它的使用方法如下:

[capture](parameters) -> return_type { body } 

其中:

  • capture指定了Lambda表达式可以访问的外部变量
  • parameters是Lambda表达式的参数列表(不需要时可忽略)
  • return_type是返回类型(有条件可忽略)
  • body是Lambda函数体

下面是一个简单的例子,演示了Lambda表达式的基本用法:

#include <iostream>  
using namespace std;  
  
int main() {  
    // Lambda 表达式捕获外部变量,并对传入的参数执行加法运算  
    int a = 5;  
    int b = 3;  
      
    auto sum = [a, b](int x, int y) -> int {  
        return a * x + b * y;  
    };  
  
    cout << sum(2, 3) << endl;  // 输出 19  
    return 0;  
}  

在这个例子中,a和b是通过"值捕获"的方式引入的外部变量。Lambda表达式接受两个参数x和y,然后返回表达式a*x+b*y的结果。

此外其中的return type是可以省略的,如果匿名函数内只有一个return并且返回类型是可以被推导的话。但是,如果Lambda函数体中存在多个返回语句,并且这些返回语句返回的类型不一致,或者Lambda函数体中没有返回语句(即返回void类型),这种情况下就必须显式指定返回类型,而不能省略。

最后,如果Lambda函数不需要parameters传入或者需要忽略参数,你可以在Lambda函数的参数列表的位置使用空的圆括号()或者完全省略它们。这取决于Lambda函数是否接受参数。

 

posted @ 2024-01-03 17:17  FreeCheng  阅读(21)  评论(0编辑  收藏  举报