当前位置: 首页 > article >正文

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)性能问题:值传递会复制外部变量的值,产生额外的性能开销。如果不需要修改外部的值,建议使用引用传递。


http://www.kler.cn/a/528617.html

相关文章:

  • CSS 图像、媒体和表单元素的样式化指南
  • EigenLayer联合Cartesi:打造面向主流用户的DeFi、AI等新用例
  • 【Quest开发】手柄单手抓握和双手抓握物体切换
  • PHP中配置 variables_order详解
  • MSA Transformer
  • C语言--数据在内存中的存储
  • 类和对象(中)---默认函数
  • Linux命令入门
  • Python 模块导入问题终极解决指南
  • 土地覆盖产品批量下载(GLC_FCS30 、Esri_GLC10、 ESA_GLC10 、FROM_GLC10)
  • 深度学习 DAY3:NLP发展史
  • 网络工程师 (11)软件生命周期与开发模型
  • vscode命令面板输入 CMake:build不执行提示输入
  • Mono里运行C#脚本39—mono_jit_runtime_invoke函数
  • mac 手工安装OpenSSL 3.4.0
  • Linux02——Linux的基本命令
  • 水瓶加水时的重心变化,MATLAB计算与可视化
  • Day24 洛谷普及2004(内涵前缀和与差分算法)
  • 【上篇】-分两篇步骤介绍-如何用topview生成和自定义数字人-关于AI的使用和应用-如何生成数字人-优雅草卓伊凡-如何生成AI数字人
  • MySQL 如何深度分页问题
  • 论文阅读(十):用可分解图模型模拟连锁不平衡
  • 第25节课:前端缓存策略—提升网页性能与用户体验
  • 早期车主告诉后来者,很后悔买电车,一辈子都被车企拿捏了
  • kamailio-ACC_JSON模块详解
  • 【算法设计与分析】实验7:复杂装载及0/1背包问题的回溯法设计与求解
  • 快速了解Java虚拟机(JVM)以及常见面试题(持续更新中