QT/C++ 关于 Lambda 表达式的一些笔记

若理解有误,同学赶紧指点


Lambda 表达式的作用是声明匿名函数,通常在局部使用,主要使代码更直观、简洁。
由表达式声明的匿名函数默认是只读的,若要在其中进行值变更,则应添加关键字 mutable .

* 使用示例:

// ① 使用按钮来触发匿名函数打印文本
QPushButton* btn = new QPushButton(this);
connect(btn, &QPushButton::pressed, [=]{ qDebug("Test") }); // 结果:Test

// ② 使用 auto 来指向匿名函数,供后续直接调用。
auto plus = [=](int v1, int v2) -> int { return v1 + v2; };
int sum = plus(1, 2);



* 表达式基本构成:
C++11 : [capture] (params) specifiers ->return type {body};
C++14 : params 支持 auto 关键字。
C++20 : [capture] <tparams>(params) specifiers ->return type {body}; // 支持模板
C++23 : [capture] specifiers {body};

* 构成部分说明:
[capture] :捕获列表,可在所在类的成员与所在函数体的局部变量范围内,对参数进行捕获以供匿名函数内调用。
[=]: 以值传递的方式获取可捕获范围内的所有参数。
[&]: 以引用的方式获取可捕获范围内的所有参数。
[var] / [&var]: 以参数名的形式获取指定参数。
[this]: 通过 this 指针获取对应类的成员。
支持多个参数,但顺序严格为先【=/&】符再【var】,如:

int a = 1;
int b = 2;

// 先用 = 来以值传递的方式获取范围内所有参数,但对 b 以引用的形式传递。
[=, &b]
{
    qDebug << a + b;
}

或者获取多个特定参数【var1, var2, ...】.


(params) : 与普通函数形参列表无异。不使用时可连 () 一起省略。
specifiers : 一些可选的 Lambda 参数,常用的有 mutable 、exception 等, return type 实际也包含其中。
return type : 显式指定返回类型,也可以不指定由编译器从函数体中的 retruen 语句来推导。格式 ->type ,不指定时可省略。
{body} : 函数的逻辑代码,与普通函数体无异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值