温馨提示×

lambda表达式

Lambda表达式是C++11中引入的一个新特性,它允许我们在代码中定义一个匿名的函数对象。Lambda表达式可以在需要函数对象的地方替代传统的函数对象或函数指针,从而使代码更加简洁和易读。

Lambda表达式的语法如下:

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

其中,

  • capture list:用来捕获外部变量,可以是值捕获、引用捕获或者混合捕获。
  • parameters:参数列表,与普通函数一样。
  • return_type:返回类型,可以是显式指定,也可以根据lambda体自动推导。
  • lambda body:lambda表达式的具体实现代码。

下面是一个简单的示例,演示了如何使用lambda表达式来计算两个数的和:

#include <iostream>

int main() {
    int a = 5, b = 3;
    auto sum = [](int x, int y) { return x + y; };
    
    std::cout << "Sum of " << a << " and " << b << " is " << sum(a, b) << std::endl;
    
    return 0;
}

在这个例子中,sum是一个lambda表达式,它以两个整数作为参数,并返回它们的和。我们使用auto关键字来推导lambda表达式的类型,也可以显式指定类型。

Lambda表达式可以捕获外部变量,例如:

#include <iostream>

int main() {
    int factor = 2;
    
    auto multiply = [factor](int x) { return x * factor; };
    
    std::cout << "Multiply 5 by " << factor << " is " << multiply(5) << std::endl;
    
    return 0;
}

在这个例子中,multiply是一个lambda表达式,它以一个整数作为参数,并将其乘以外部变量factor的值。[factor]表示值捕获,我们还可以使用[&factor]表示引用捕获。

Lambda表达式还支持函数重载、返回值自动推导、可变参数等功能,使得它在实际开发中非常灵活和强大。希望本教程能够帮助你更好地理解和使用C++11中的lambda表达式。