lambda表達式的強大無需多言,C++11推出了後,C++不用引用別的大型庫也可以使用了,說一下注意事項並貼一個簡易Demo吧。
[]
// 不捕獲任何外部變量[=]
// 以值的形式捕獲所有外部變量[&]
// 以引用形式捕獲所有外部變量[x, &y]
// x 以傳值形式捕獲,y 以引用形式捕獲[=, &z]
// z 以引用形式捕獲,其餘變量以傳值形式捕獲[&, x]
// x 以值的形式捕獲,其餘變量以引用形式捕獲- 另外有一點需要注意。對於
[=]
或[&]
的形式,lambda 表達式可以直接使用 this 指針。但是,對於[]
的形式,如果要使用 this 指針,必須顯式傳入: - std::function<[返回值類型]([第一個參數類型],[第二個參數類型],..)>,記住這個格式,記不住就寫auto吧簡單點
#include <iostream>
#include <functional>
int main(int argc, char* argv[])
{
int a=4;
float b=1.4f;
std::function<void(const char*,const char*)> fun=[a,&b](const char* str1,const char* str2){
printf("我是第一個參數%s\r\n",str1);
printf("我是第二個參數%s\r\n",str2);
printf("我是外部變量a值傳遞%d\r\n",a);
printf("我是外部變量b引用傳遞%f\r\n",b);
b=1.7f;
};
fun("Hello","World");
printf("b變化爲%f\r\n",b);
return 0;
}