lambda of c++11

Lambda of c++11

1.完整声明

[捕获外部变量](形参列表) 异常设定 ->返回类型{函数体}

2.例子

    int a = 123;

    auto f = [a] { cout << a << endl; }; 

    f(); // 输出:123

 

    //或通过函数体后面的‘()’传入参数

auto x = [](int a){cout << a << endl;}(123); 

3.具体讲解

auto f = [&a] { cout << a << endl; };

 /*

*[]不捕获任何外部变量

*[变量名, …]默认以值得形式捕获指定的多个外部变量(用逗号分隔),如果引用捕获,需要显示声明(使用&说明符)

*[this]以值的形式捕获this指针

*[=]以值的形式捕获所有外部变量

*[&]以引用形式捕获所有外部变量

*[=, &x]变量x以引用形式捕获,其余变量以传值形式捕获

*[&, x]变量x以值的形式捕获,其余变量以引用形式捕获

*/

        int m = [](int x) { return [](int y) { return y * 2; }(x)+6; }(5);

        std::cout << "m:" << m << std::endl;            //输出m:16

        auto gFunc = [](int x) -> function<int(int)> { return [=](int y) { return x + y; }; };

        auto lFunc = gFunc(4);

        std::cout << lFunc(5) << std::endl;

        auto hFunc = [](const function<int(int)>& f, int z) { return f(z) + 1; };

        auto a = hFunc(gFunc(7), 8);

        int a = 111, b = 222;

        auto func = [=, &b]()mutable { a = 22; b = 333; std::cout << "a:" << a << " b:" << b << std::endl; };

        func();

        std::cout << "a:" << a << " b:" << b << std::endl;

 

猜你喜欢

转载自blog.csdn.net/qq_33564134/article/details/80163680