首页 > 编程笔记 > C++笔记 阅读:87

C++ Lambda表达式的用法(附带实例)

C++11 中的 Lambda 表达式是一种用于创建匿名函数对象(也称为闭包)的简洁的语法。

Lambda 表达式允许程序员在代码中定义并使用小段的代码,而这些代码可以像函数一样被调用,同时也可以访问并操作其外部作用域的变量。

Lambda 表达式的基本语法如下:
[capture_list](parameter_list)body->return_type

捕获列表有值捕获、引用捕获、混合捕获和默认捕获:
1) 通过值捕获使用“=”来捕获所有外部变量,并通过值的方式传递给 Lambda 函数体。在函数体内,这些变量是常量,不能被修改,示例代码如下:
auto lambda = [=](){
    //在这里,所有外部变量都可以通过值访问,但不能修改
};

2) 通过引用捕获使用 & 来捕获所有外部变量,并通过引用的方式传递给 Lambda 函数体。在函数体内,这些变量可以像普通变量一样被修改,示例代码如下:
auto lambda = [&](){
    //在这里,所有外部变量都可以通过引用进行访问和修改
};

3) 混合捕获同时使用 = 和 & 来捕获不同的变量,或者使用明确的变量名来指定哪些变量被捕获,示例代码如下:
int x = 10;
int& ref = x;
const int& cref = x;
auto lambda = [x,&ref,cref](){
    //在这里,x通过值捕获,ref和cref通过引用捕获
    //x是只读的,而ref和cref可以修改
};

4) 默认捕获使用空的捕获列表来捕获所有外部变量,这实际上是 = 和 & 的混合体。对于非静态成员变量,它使用引用捕获;对于其他所有变量使用值捕获,示例代码如下:
auto lambda = [](){
    //在类的成员函数中使用,捕获当前对象的所有成员变量
    //非静态成员变量通过引用来捕获,其他变量通过值来捕获
};

当缺省了返回值类型时,编译器会根据最后的 return 语句自动地推导出返回值类型,代码如下:
auto add =[](int a,int b){return a + b;};
int main()
{
    int result = add(3,5);
    std::cout<< result<< std::endl;//Output:8
    return 0;
}
在这个例子中定义了一个 Lambda表达式[](int a, int b){return a+b;},并将其赋值给一个变量 add,然后可以在 main() 函数中像调用普通函数一样调用这个 Lambda 表达式。

相关文章