C++ lambda 表达式

本文详细解读了lambda表达式的捕获列表、参数传递方式和返回类型,通过实例展示了如何在C++中使用它们。重点讲解了值拷贝、引用捕获以及混合使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lambda 表达式

形式:[capture_list](args_list) -> returnType {}

  • capture_list 是要捕获的 外部局部变量列表。
    1. 使用变量值,是值拷贝,默认不可修改。若需要在函数体内部可以改变值,在参数列表后加上 mutable。即使修改了,也不会影响原外部的值。
    2. 使用引用,如 &a。引用捕获。 引用依赖的若是const引用,则不能修改,反之可通过引用修改。
    3. 只使用 一个 &=,前者是引用捕获,后者是值捕获。在函数体中,直接使用外部局部变量,会自动推断捕获列表。隐式捕获
    4. 可以混用 显式和隐式捕获。当混用时,第一个元素必须是一个 &或=
  • args_list 参数列表
  • returnType 返回类型。
    若函数体内只有一条return语言,可以省略 -> returnType 声明。
    当还有其它语句时,需要声明 -> returnType 。
void testLambda1() {
    vector<int> vec = {1,20,3,4,5};
    auto res = find_if(vec.begin(), vec.end(), [](int it) -> bool { //可省略 -> bool,会自动推断。
        return it % 2 == 0;
    });
    cout << *res << endl;  //输出20
}
// lambda要使用外部局部变量,必须定义在[]列表中,以逗号分隔。
void testLambda2() {
    vector<int> vec = {1,20,3,4,5};
    int temp = 3;
    auto res = find_if(vec.begin(), vec.end(), [temp](int &it) -> bool {
        return it == temp;
    });
    cout << *res << endl;
}
// 值拷贝外局部变量,若需要在函数体内部可以改变值,在参数列表后加上 mutable
void testLambda3() {
	auto mut = [temp] () mutable {
	    return ++temp;
	};
	cout << mut() << temp << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值