C++11新特性之lambda表达式

1.介绍

        C++11引入了lambda表达式。lambda表达式提供一种简洁的方式来定义匿名函数对象,使得在需要临时定义一个函数时非常方便。

2.lambda表达式用法

        lambda表达式的基本用法为:  

[捕获列表](参数列表)->返回类型

        函数体 

};

捕获列表:指定lambda表达式可以访问那些外部变量,以及以哪种方式访问。下面列举常用的几种格式。

        (1)[  ]——空括号表示不导入任何外部变量。

        (2)[ = ]—— 以值传递的方式导入所有外部变量。(常用)

        (3)[ & ]——以引用传递的方式导入所有外部变量。(常用)

        (4)[val1, val2...]——以值传递的方式导入val1,val2等指定变量。

        (5)[&val1, &val2...]——以引用传递的方式导入val1,val2等指定变量。

        (6)[val1, &val2...]——以值传递的方式导入val1,引用传递的方式导入val2。(两种方式可以混合使用)

        (7)[ this ]——以值传递的方式导入当前的this指针。

        在一般使用中可以直接使用(2)与(3),简单并且不容易出错。

参数列表:传递给lambda表达式的参数。

返回类型:显式指定lambda表达式的返回类型。(这部分可以省略不写)。

函数体:lambda表达式执行的代码。

例一:

#include <iostream>

int main() {
    auto add = [](int a, int b){
        return a + b;
    };
    int result = add(10, 20);
    std::cout << "Result: " << result << std::endl;
    return 0;
}

例二:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int num[4] = {4, 2, 3, 1};
    //对 a 数组中的元素进行排序
    sort(num, num+4, [=](int x, int y) -> bool{ return x < y; } );
    for(int n : num){
        cout << n << " ";
    }
    return 0;
}

3.总结

优点:

        lambda表达式使C++编程更加灵活,尤其在处理临时函数与回调函数时非常方便。

注意事项:

        (1)生命周期:确保lambda引用的变量是有效的,否则可能导致未定义错误。

        (2)性能问题:值传递会复制外部变量的值,产生额外的性能开销。如果不需要修改外部的值,建议使用引用传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值