c++11 lambda

測試代碼

#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中使用當前類的成員函數和成員變量。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Lambda表達式的使用場景 其實我在剛開始使用lambda的時候就挺好奇什么時候使用好,經常在不需要使用的時候使...
    Faith猿_閱讀 690評論 0 0
  • 匿名函數是許多編程語言都支持的概念,有函數體,沒有函數名。1958年,lisp首先采用匿名函數,匿名函數最常用的是...
    Mr希靈閱讀 1,538評論 0 1
  • C++11 - Lambda 表達式用法 版權聲明:本文為 cheng-zhi 原創文章,可以隨意轉載,但必須在明...
    登龍zZ閱讀 10,739評論 0 6
  • 1、介紹 lambda表達式常用于向函數傳遞謂詞,有些函數的參數只能接受一元謂詞(如find_if),但是如果我們...
    一天不工作渾身難受閱讀 287評論 0 0
  • 1. lambda表達式的定義形式 lambda表達式是C++11引入的一個重要特性之一,來源于函數式編程的概念。...
    georgeguo閱讀 2,675評論 0 1