C++ 語法實驗室之強大的lambda表達式

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章