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

C++Lambda表达式

C++Lambda表达式

  • 定义
  • 捕获列表
    • 1、按值捕获
    • 2、按引用捕获
    • 3、隐式捕获
      • 按值所有
      • 按引用所有
    • 4、混合捕获

定义

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

部分说明是否可选
[capture]捕获列表:指定如何访问外部变量❌ 必需(可为空 []
(parameters)参数列表(类似函数)✅ 可省略(无参时)
-> return_type返回类型(通常可自动推导)✅ 可省略
{ body }函数体❌ 必需
#include <iostream>
#include <string>
using namespace std;int main()
{int a = 10, b = 20;// 外部变量用不着,但是也需要写[]// auto func1 = [](int x, int y) -> int { return x + y; };auto func1 = [](int x, int y) { return x + y; };int c = func1(a, b);cout << "result=" << c << endl;// 参数列表用不着,可以省略()// auto func2 = []() -> string { return "hello world"; };auto func2 = [] { return "hello world"; };cout << "result=" << func2() << endl;
}

捕获列表

捕获列表决定 Lambda 如何访问外部作用域的变量

1、按值捕获

好处就是外面修改了,里面的值不会变

int main()
{int a = 10;auto func1 = [a]() {cout << "内部a=" << a << endl;// 不可修改,编译不过// a = 100;};// 外部修改a = 100;func1();cout << "外部a=" << a << endl;
}

2、按引用捕获

传引用,内部、外部都可以修改,一变全变

int main()
{int a = 10;auto func1 = [&a]() {cout << "内部修改前a=" << a << endl;// 内部修改a = 100;cout << "内部修改后a=" << a << endl;};// 外部修改//a = 100;func1();cout << "外部a=" << a << endl;
}

3、隐式捕获

  • [=]默认按值捕获所有用到的外部变量
  • [&]默认按引用捕获所有用到的外部变量
    好处就是不用一个一个写参数了,默认全部参数一起带过去

按值所有

int main()
{int a = 10, b = 20;auto func1 = [=]() {cout << "内部a=" << a << " ,b=" << b << endl;};// 外部修改a = 100;func1();cout << "外部a=" << a << " ,b=" << b << endl;
}

按引用所有

int main()
{int a = 10, b = 20;auto func1 = [&]() {cout << "before内部a=" << a << " ,b=" << b << endl;b = 200;cout << "after内部a=" << a << " ,b=" << b << endl;};// 外部修改a = 100;func1();cout << "外部a=" << a << " ,b=" << b << endl;
}

4、混合捕获

  • [=, x] 不能在默认按值后显式按值捕获
  • [&, &x] 不能在默认按引用后显式按引用捕获
int main()
{int a = 10, b = 20;auto func1 = [a, &b]() {cout << "before内部a=" << a << " ,b=" << b << endl;b = 200;cout << "after内部a=" << a << " ,b=" << b << endl;};// 外部修改a = 100;func1();cout << "外部a=" << a << " ,b=" << b << endl;
}
http://www.dtcms.com/a/517831.html

相关文章:

  • 浙江手机版建站系统开发六安网站推广获客app
  • 网站和网页的区别在于搜索引擎提交入口
  • 网站开发php支付接口山东饰品行业网站开发
  • 自助发外链网站浅谈高校门户网站建设的规范标准
  • 建设电影网站点击播放是乱页的网站建站北京
  • 【算法专题训练】26、队列应用-广度优先搜索
  • 域名买好怎么开始做网站科技有限公司网页设计
  • dedecms网站备份一个做二维码问卷调查的网站
  • 衡水微信网站建设建行官方网站多少
  • C#中同步工具EventWaitHandle的打开方式详解
  • 衡东网站制作wordpress主机免费
  • 可以做cps合作的棋牌网站6软件开发培训班价格
  • git 添加除了包含特定字符串的文件
  • 校园服装网站建设预算全球建筑设计公司前十名
  • 扁平化设计重庆seo全面优化
  • 吴江城乡和住房建设局网站网站建设属于税收
  • 学校网站群建设 ppt旅游网站建设的目的及功能定位
  • 传输层协议分析
  • 开网站建设公司wordpress推荐好友
  • The Art of Scaling Reinforcement Learning Compute for LLMs
  • 建设银行辽宁省分行网站蚌埠网站建设专业的公司
  • 品牌设计网站音乐网站答辩
  • 网站自动化开发免费制作永久企业网站
  • 免费直播网站wordpress 线条不显示
  • 制作快递网站衡水做网站推广
  • 建筑必看六个网站自动采集的网站
  • 在百度做个卷闸门网站怎么做百度seo效果优化
  • JFrog vs Hadess,制品管理工具一文全面对比分析
  • 网站页面做成自适应优缺点wordpress+机械模板
  • 上海开办企业一窗通网上服务平台北京seo产品