#include <iostream>
#include <vector>
#include <algorithm>
/*
lamda表達式的基本語法:
[capture](parameters)->return-type{body}
語法說明:
[capture]:變量捕獲,這裏指定在lamda表達式中可見的外部變量,並說明是以傳值還是傳引用的方式進行捕獲
(parameters):lamda表達式形參變量。若lamda表達式沒有形參,可以省略不寫
->return-type:lamda表達式的返回值類型,若沒有返回值,則可以省略不寫
{body} : lamda表達式函數體。
lamda表達式最簡形式:
[capture]{body}
其中形參、返回值以及函數體和普通的函數基本沒有什麼區別,主要是[capture]的用法:
[] //未捕獲變量.試圖在Lambda內使用任何外部變量都是錯誤的.
[x, &y] //x 按值捕獲, y 按引用捕獲.
[&] //以引用的方式捕獲當前作用域下的外部的所有變量
[=] //以值傳遞的方式捕獲當前作用域下的外部的所有變量
[&, x] //x顯式地按值捕獲. 其它變量按引用捕獲
[=, &z] //z按引用捕獲. 其它變量按值捕獲
*/
int main() {
std::vector<int> test;
test.push_back(1);
test.push_back(2);
test.push_back(3);
test.push_back(4);
test.push_back(5);
auto print_func = [](int a){
std::cout << a << std::endl;
};
std::for_each(test.begin(), test.end(), print_func);
int total = 0;
auto sum_func = [&](int a) {
total += a;
};
std::for_each(test.begin(), test.end(), sum_func);
std::cout << "total:" << total << std::endl;
return 0;
}
使用示例方式記錄lamda表達式使用方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.