美文网首页
c++11 lambda

c++11 lambda

作者: 剑有偏锋 | 来源:发表于2020-01-02 19:29 被阅读0次

测试代码

#include <iostream>

int main()
{
    int testvalueA = 1;    
    auto testFuncA = [=](int a, int b)->int {
        //testvalueA += 1; //readonly
        std::cout<<"##inter "<<testvalueA<<std::endl;
        return a+b +testvalueA;
    };
    std::cout<<testvalueA<<std::endl;
    testFuncA(1,1);
    std::cout<<testvalueA<<std::endl;
    std::cout<<std::endl;

    int testvalueB = 1;
    auto testFuncB = [&](int a, int b)->int {
        testvalueB += 1;
        std::cout<<"##inter "<<testvalueB<<std::endl;
        return a+b + testvalueB;
    };
    std::cout<<testvalueB<<std::endl;
    testFuncB(1,1);
    std::cout<<testvalueB<<std::endl;
    std::cout<<std::endl;

    int testvalueC = 1;
    int testvalueD = 1;
    auto testFuncC = [testvalueC, &testvalueD](int a, int b)->int {
        //testvalueC += 1; //readonly
        testvalueD += 1;
        std::cout<<"##inter "<<testvalueC<<" "<<testvalueD<<std::endl;
        return a+b;
    };
    std::cout<<testvalueC<<" "<<testvalueD<<std::endl;
    testFuncC(1,1);
    std::cout<<testvalueC<<" "<<testvalueD<<std::endl;

    return 0;
}

编译输出

 g++   -std=c++11 -o out lambdatest.cpp && ./out
1
##inter 1
1

1
##inter 2
2

1 1
##inter 1 2
1 2

总结

1).[]不捕获任何变量。

2).[&]捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获)。

3).[=]捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获)。

4).[=,&foo]按值捕获外部作用域中所有变量,并按引用捕获foo变量。

5).[bar]按值捕获bar变量,同时不捕获其他变量。

6).[this]捕获当前类中的this指针,让lambda表达式拥有和当前类成员函数同样的访问权限。如果已经使用了&或者=,就默认添加此选项。捕获this的目的是可以在lamda中使用当前类的成员函数和成员变量。

相关文章

  • C++11中Lambda的使用

    C++11中Lambda的使用 Lambda functions: Constructs a closure, a...

  • c++11 新特性

    c++11的新特性 1.1 lambda表达式 lambda表达式讲解 例子1: 例子2: C++11中的Lamb...

  • Lambda函数

    lambda函数定义 lambda函数是C++11中的新特性,名称来自于lambda calculus(λ演算)。...

  • C++ Lambda函数与表达式

    C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。 Lambda 表达式...

  • Lambda函数与表达式

    C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。Lambda表达式完整...

  • c++11 lambda表达式

    1 lambda表达式 C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式)。Lamb...

  • C++ 匿名函数(lambda函数,lambda表达式)

    C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). Lambda表达式具体形式如下...

  • c++11 lamda函数

    https://www.cprogramming.com/c++11/c++11-lambda-closures....

  • C++11匿名函数

    [C++11] Lambda表达式 Lambda表达式是一个匿名函数。基本语法如下:[capture list] ...

  • C++中的Lambda表达式

    1.Lambda函数与表达式 C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式)。L...

网友评论

      本文标题:c++11 lambda

      本文链接:https://www.haomeiwen.com/subject/xtpooctx.html