【Qt】C++11 Lambda表达式
1. 举例
connect(ui->pushButton, &QPushButton::clicked, [=](bool checked){//具体代码qDebug() << "Hello" << checked;});
2. 详情
//完整形式
[ capture ] ( params ) opt -> ret { body; };
capture
是捕获列表params
是参数表opt
是函数选项ret
是返回值类型body
是函数体。
3. []
内的表达
[]
不捕获任何变量。[&]
捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获)。[=]
捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获)。[=,&foo]
按值捕获外部作用域中所有变量,并按引用捕获 foo 变量。[bar]
按值捕获 bar 变量,同时不捕获其他变量。[this]
捕获当前类中的 this 指针,让 lambda 表达式拥有和当前类成员函数同样的访问权限。如果已经使用了 & 或者 =,就默认添加此选项。捕获 this 的目的是可以在 lamda 中使用当前类的成员函数和成员变量。
4. 参考
【Qt笔记】 qt信号与槽的连接,附带说一下lambda和函数指针