C++11 lamda表達式

lamda表達式可以被認爲是一個匿名的函數,之前不明白爲什麼C++11中會加入這個特性?匿名的函數能帶來什麼好處?有名的函數只不過增加了一些函數調用開銷而已,無傷大雅。下面開始走進lamda函數的世界。

基本的Lamda函數

int main(int argc, char** argv)
{
	auto addfun = [](int _a, int _b)->int
	{
		return _a + _b;
	};

	int sum = addfun(4, 5);
	cout << "sum=" << sum << endl;
	return 0;
}

addfunc就是一個lamda函數,這裏使用auto來獲取addfunc的類型。其中[ ]表示開始定義lamda函數,緊接着括號裏是函數的參數,->後面是返回類型。正常情況下,只要函數中所有return都是同一個類型的話,編譯器會自行判斷返回類型,也可以通過尾置返回指定類型。

那麼lamda函數的形式是什麼呢?如下所示:

[captures](params) -> ret {Statments; }

Lamda函數中的變量截取

[ ]不截取任何變量

[&]截取外部作用域中所有變量,並作爲引用在函數中使用

[=]截取外部作用域中所有變量,並拷貝一份在函數中使用

[=,&fun]截取外部作用域中所有變量,並拷貝一份在函數中使用,但是對fun變量使用引用

[_y]截取_y變量並拷貝一份在函數中使用,同時不截取其他變量

[this]截取當前類的this指針,如果使用了&或者=就默認添加此選項

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