C 11 lambda 快速理解

2021-06-20 13:15:02 字數 1946 閱讀 1299

lambda 匿名函式

現階段,編譯器會將lanmbda匿名函式,轉換為仿函式!故,stl演算法完全可以使用lambda匿名函式。

auto b2 = [a, &b] (int c) -> int(1000);

[var]   傳值方式(唯讀)將變數傳遞到匿名函式中

[=]     父作用範圍的所有變數以傳值方式(唯讀),傳遞到匿名函式中(包括this)

[&var]  引用方式(讀寫)將變數傳遞到匿名函式中

[&]     父作用範圍的所有變數以引用方式(讀寫),傳遞到匿名函式中(包括this)

[this]  傳遞當前this指標

[=,&var1,&var]  var1,var2以讀寫方式傳遞到匿名函式中,其他變數以唯讀方式傳遞到函式中

[&,var1,this]   var1,this以唯讀方式傳遞到函式中,其他變數以讀寫方式傳遞到函式中

捕捉非父作用範圍的變數,或者非自變數(如,靜態常量)等,都將導致編譯錯誤。故可以看出,匿名函式

非動態函式,在編譯期就定義了,故不會產生額外開銷。

#include #include /*

* */

int main(void) ; // 將建立的匿名函式賦值給sum

std::cout << typeid(sum).name() << std::endl;

int x = 10, y = 20;

auto result = sum(x, y);

std::cout << "result : " << result << std::endl;

;// 只是宣告了乙個lambda函式,但未呼叫

();// 宣告並呼叫乙個lambda函式

int a = 1, b = 10;

// 無法通過編譯

// ;

[=] ;

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

[&] (int c) (50);

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

// [&a, b] (int c) (1000);

auto b2 = [a, &b] (int c) -> int(1000);

std::cout << "b = " << b << " b2 = " << b2 << std::endl;

return 0;

}

#include #include #include struct 

} p1;

/* *

*/int main(void) ;

std::for_each(ids.begin(), ids.end(), p1);

std::cout << "\n---------------------------" << std::endl;

std::for_each(ids.begin(), ids.end(), (int& i) );

return 0;

}

lambda與c++11執行緒的使用,非常的靈活,強大。

/* 

* file: main.cpp

* author: vicky.h

* email: [email protected]

*/#include #include /*

* */

int main(void) });

t.detach();

for (;;)

}return 0;

}

i = 1

i = 1

i = 2

i = 3

i = 5

i = 5

i = 7

i = 8

c 11 lambda 匿名函式

include include using namespace std placeholders lambda即匿名函式 intmain 格式 captures params ret auto func lambda中變數擷取 不擷取任何變數 擷取外部作用域中所有變數,並作為引用在函式體中使用 擷取...

C 11 lambda使用技巧小結

在lambda中 一般的引數捕獲有 1.值傳遞 2.引用傳遞 官方文件寫傳值只能讀不能寫,但傳引用的話可以讀和寫。如果增加mutable宣告,則可以修改值傳遞的物件。例1j 10 auto by val 1 j mutable by val 1 cout j j endl 結果lambda j 11...

C 11Lambda捕獲列表使用

情況比較多,發現乙個比我總結好的,摘抄之 捕獲值列表,是允許我們在lambda表示式的函式體中直接使用這些值,捕獲值列表能捕獲的值是所有在此作用域可以訪問的值,包括這個作用域裡面的臨時變數,類的可訪問成員,全域性變數。捕獲值的方式分兩種,一種是按值捕獲,一種是按引用捕獲。顧名思義,按值捕獲是不改變原...