C++11 Lambda函数 入门

/*C++11 Lambda函数 入门 */
#include
using namespace std;
int main(){
    int var1 = 1, var2 = 2;
    // add_param 是函数名称, = 后面是函数体,[]是lamda 引出符,
    //()表示接受参数,若无参数,可省略()
    //->表示后面为函数体,可省略.
    // int 为返回值类型
    //{} 内为函数体,可以使用参数及父作用域变量
    //在函数内直接定义函数
    auto add_param = [](int x, int y)->int {return x + y; };    
    cout << add_param(var1, var2)<     // [=]以值传递的方式捕获父作用域变量
    auto add_2var = [=] {return var1 + var2; };
    cout << add_2var() << endl; //3
    // [=]以值传递的方式捕获父作用域变量, 父作用域变量是不能直接修改的
    // 因为Lambda默认是const 属性
    // [&]以引用方式捕获父作用域变量,就可以直接修改父作用域变量
    // 无返回值类型
    var1 = 3;
    auto fun2 = [&](int x) {var2 = var1 + x; var1 = 1; };
    fun2(3);
    cout << var1 <<" "<< var2 << endl;//1 6
    var1 = 10; var2 = 11;   //重新赋值
    //Lambda [=] 默认是const属性, assignment of read-only variable ‘var1’
    // 加mutable 修饰符,就可以在函数体里修改var1,var2, 但退出后值不变,还是10,11
//    auto fun3 = [=](int x) mutable {var2 = var1 + x; var1 = 1; };
    // 以引用方式捕获父作用域变量,可以直接修改
    auto fun3 = [&](int x) {var2 = var1 + x; var1 = 1; };    
    fun3(3);
    cout << var1 << " " <     var1 = 1; var2 = 2;   //重新赋值
    // 以值方式捕获父作用域变量, 加mutable 修饰符,就可以在函数体里修改, 但退出后值不变,还是1 2
    auto fun4 = [=](int x, int y) mutable->int {var1 += x; var2 += y; return var1 + var2; };
    int t = fun4(10, 20);
    cout << t << endl;  //33
    cout << var1 <<" "<< var2 << endl;    //1 2
    return 0;
}

你可能感兴趣的:(#,c++,编程,c++,lambda)