[C++] Lambda表达式

Lambda表达式语法定义

Lambda 表达式的基本语法如下:
[capture-list] (parameters) -> return-type {
    // 函数体
}

例子:

int x = 10;
auto function = [=](int a, int b) mutable -> int {
    return a + b + x;
}

int ret = function(10, 20); // 输出50

Lambda表达式参数详解

  • []表示不捕获任何变量
  • [var]表示值传递方式捕获变量var
  • [=]表示值传递方式捕获所有父作用域的变量(包括this)
  • [&var]表示引用传递捕捉变量var
  • [&]表示引用传递方式捕捉所有父作用域的变量(包括this)
  • [this]表示值传递方式捕捉当前的this指针
  • [=, &] 拷贝与引用混合

Lamdba在STL中的应用

#include <algorithm>
#include <cmath>

void abssort(float* x, unsigned n) {
    std::sort(x, x + n,
        [](float a, float b) {
            return (std::abs(a) < std::abs(b));
        }
    );
}

Lamdba表达式在QT中的应用

QTimer *timer=new QTimer;
timer->start(1000);
QObject::connect(timer, &QTimer::timeout, [&]() {
        qDebug() << "time out";
});
int a = 10;
QString str1 = "Key press";
connect(pBtn4, &QPushButton::clicked, [=](bool checked) {
    qDebug() << a <<str1;
    qDebug() << checked;
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值