c++11 lambda

测试代码

#include 

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

编译输出

 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)