C艹的lambda 函数(匿名函数-类)

发布于 2024-04-11  37 次阅读


C艹的lambda 函数(匿名函数-类)

[](int x, int y){ return x < y ; }

如果 lambda 函数没有传回值(例如 void),其返回类型可被完全忽略。

lambda默认是一个const{}的,要想其可以在内部修改外部的变量需要增加mutable

[](int x, int y)mutable{ return x < y ; }

在Lambda表达式内可以访问当前作用域的变量,这是Lambda表达式的闭包(Closure)行为。 与JavaScript闭包不同,C++变量传递有传值和传引用的区别。可以通过前面的[]来指定:

[]      // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&]     // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=]     // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x]  // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。

另外有一点需要注意。对于[=]或[&]的形式,lambda 表达式可以直接使用 this 指针。

但是,对于[]的形式,如果要使用 this 指针,必须显式传入:

[this]() { this->someFunc(); }();
QQ:2219349024
最后更新于 2024-04-11