C++11中的lambda表达式是什么?如何使用它们?

C++11中引入的lambda表达式是一种方便的编写匿名函数对象的方式。它们常用于短小的函数体,特别是在需要作为参数传递给算法或其他函数的情况下。

基本语法:

[捕获列表](参数列表) -> 返回类型 {
    函数体
}
  • 捕获列表: 定义了lambda表达式可以访问的外部变量,可以是值捕获、引用捕获或隐式捕获。
  • 参数列表: 类似于普通函数的参数列表,用于定义传递给lambda表达式的参数。
  • 返回类型: 可以显式指定lambda表达式的返回类型,也可以让编译器自动推断。
  • 函数体: 定义了lambda表达式的执行逻辑。

使用示例:

  1. 基本使用:
    auto add = [](int a, int b) -> int {
       return a + b;
    };
    int sum = add(3, 5); // 调用lambda表达式
    
  2. 作为函数参数:
    std::vector<int> vec = {1, 2, 3, 4, 5};
    std::sort(vec.begin(), vec.end(), [](int a, int b) {
       return a > b; // 降序排序
    });
    
  3. 捕获外部变量:

  • 值捕获: [=] 捕获所有外部变量的副本。
  • 引用捕获: [&] 捕获所有外部变量的引用。
  • 混合捕获: [x, &y] 捕获变量 x 的副本和变量 y 的引用。

    int x = 10;
    auto check = [x](int val) {
       return val > x;
    };
    bool result = check(15); // true
    

总结:
Lambda表达式是C++11中的一个强大特性,它提供了一种简洁的方式来定义匿名函数对象,非常适合用于STL算法、事件处理、回调函数等场景。通过合理使用lambda表达式,可以使代码更加简洁易读。

发表评论

后才能评论