企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 概述 匿名函数,又称为lambda表达式,c++ 是支持匿名函数的但是需要赋值给 auto 类型 格式 ``` [capture](parameters){body} ``` 简单示例 ``` [](int x, int y) { return x + y; } // 隐式返回类型 [](int& x) { ++x; } // 没有return语句 -> lambda 函数的返回类型是'void' []() { ++global_x; } // 没有参数,仅访问某个全局变量 []{ ++global_x; } // 与上一个相同,省略了() ``` ### Lambda函数中的变量截取 ``` [] //不截取任何变量,试图在Lambda内使用任何外部变量都是错误的(全局变量除外). [&] //截取外部作用域中所有变量,并作为引用在函数体中使用 [=] //截取外部作用域中所有变量,并拷贝一份在函数体中使用,lambda修改后的值不会影响到外部 [=, &foo] //截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用 [bar] //截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量 [this] //截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。 ----------------------------- [x, &y] //x 按值捕获, y 按引用捕获. [&, x] //x显式地按值捕获. 其它变量按引用捕获 [=, &z] //z按引用捕获. 其它变量按值捕获 ``` ## 示例 ### 匿名函数在connect中的使用 ``` int n = 0; QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout,this, [=]()mutable {n += 1;qDebug()<<n<<endl;}); timer->start(1000); ``` > connect 中需要使用 "[=]"