使用示例方式記錄lamda表達式使用方法

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章