使用示例方式记录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;
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读