- 调用和传入参数
//lambda
[]{
qDebug()<<"直接调用 lambda";
}();//直接调用
auto func3 = []{
qDebug()<<"lambda";
};
func3();//调用
auto func4 = [](const QString & str){
qDebug()<<"传入参数"<<str;
};
func4("hello");//传入参数
std::function<void(const QString &)>func5 = func4;//lambda的类型
func5("std::function");
- 返回值类型推导和指定
//返回值默认推导
auto value10 = []{
return 5.55;
}();
//指定返回值类型,5.55转换为int类型5返回
auto value11 = []() ->int {
return 5.55;
}();
qDebug()<<value10<<value11;//5.55 5
- []参数捕获
1.[=]以值方式捕获,by value,此时变量是read only的,const
2.[&]引用方式捕获,by reference
3.也可以单独对指定变量捕获
//[]参数捕获
//[=]以值方式捕获,by value,此时变量是read only的,const
//[&]引用方式捕获,by reference
//也可以单独对指定变量捕获
int w = 0;
int x = 1;
int y = 2;
int z = 3;
//默认以值方式捕获所有变量,y、z以引用方式捕获
[=,&y,&z] /*() mutable 此时可在lambda函数内改变值方式捕获变量的值,但是不会影响外部变量的值,copy*/ {
qDebug()<<"in lambda before add:"<<w<<x<<y<<z;
//w += 5;//error
//x += 5;//error
y += 5;
z += 5;
}();
qDebug()<<"in main:"<<w<<x<<y<<z;
- std::find_if中使用lambda
//std::find_if中使用lambda
std::vector<QString> vec4{"aAa","cCc","dDd","bBb","fFf","eEe"};
auto value12 = std::find_if(vec4.begin(),vec4.end(),[](const QString & str){
return str.compare("ddd",Qt::CaseInsensitive) == 0;
});
if(value12 != vec4.end()){
qDebug()<<"find it:"<<*value12;
}
结果: