/**************************************************************************************
************************* lambda表达式 *************************
***************************************************************************************/
/*
匿名函数:
基本格式:
[符号](传入参数)mutable(可选) throwSpec(可选) ->返回值
{
}
符号&代表之前外部作用域的变量用引用传递到lambda表达式的内部作用域中
=代表值复制传递
//定义lambda表达式(这样直接整么法调用)因为你调用函数一定得有函数名/函数指针
[]{
cout<<"lambda"<<endl;
}
[]{
cout<<"lambda"<<endl;
}
//定义lambda表达式,立即执行
[]{
cout<<"lambda"<<endl;
}();
//定义lambda表达式Call 然后调用
auto Call=[]{
cout<<"lambda"<<endl;
}
Call();
*/
int lambdahelloOut = 0;
SHOW_SMALL_FUNCTION_BLOCK_TIPS("lambda表达式")
//代表着一种类型
{
int lambdahelloIn = 0;
//定义lambda表达式,立即执行
[] {
cout << "lambda" << endl;
}();
//定义lambda表达式Call 然后调用
auto Call = [] {
cout << "lambda" << endl;
};
Call();
//可以直接写一个=/&代表外部变量都能在lambda中访问
//也可以直接写变量名或者&+变量名,代表值传递和引用传递
//=要改值的话必须是mutable
[=] ()mutable noexcept->int {
lambdahelloOut = 1;
lambdahelloIn = 0;
cout << "lambda=In"<<" "<<"lambdahelloOut"<< lambdahelloOut << endl;
return 1;
}();
cout << "lambda=Out" << " " << "lambdahelloOut" << lambdahelloOut << endl;
[&]() noexcept ->int{
lambdahelloOut = 1;
lambdahelloIn = 0;
cout << "lambda&In" << " " << "lambdahelloOut" << lambdahelloOut << endl;
return 1;
}();
cout << "lambda&Out" << " " << "lambdahelloOut" << lambdahelloOut << endl;
int itest1=1;
int itest2=2;
int itest3=3;
[itest1,&itest3]()mutable noexcept->int {
//lambdahelloOut = 1;无法访问
//lambdahelloIn = 0;无法访问
cout << "lambda[itest1,&itest3]In" << " " << endl;
return 1;
}();
}