Lambda 表达式

语法

[捕获列表](参数列表) -> 返回类型 {
    函数体
};
[capture](parameters)->return-type{body}
如果没有返回值可以表示为:
[capture](parameters){body}
解释:
[]:捕获外部变量(重点)
():函数输入参数
-> 返回类型:可省略
{}:函数体
  • [] // 不捕获,不需要使用外界的变量
  • [x, &y] // x以传值方式传入(默认),y以引用方式传入。
  • [&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。== 按引用捕获所有外部变量==
  • [=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。按值捕获所有外部变量
  • [&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
  • [=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
  • 注意 对于[=]或[&]的形式,lambda 表达式可以直接使用 this 指针。但是,对于[]的形式,如果要使用 this 指针,必须显式传入:this { this->someFunc(); }();
    == Lambda 默认是 const 的,不能修改值捕获的变量,若要修改,要加上 mutable==
		int x=10;
    int y=20;
    auto f=[=]()mutable{
        x++;
        int p=x;
        cout<<p<<endl;
    };
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐