lambda表达式浅析【C++学习笔记】
生活随笔
收集整理的這篇文章主要介紹了
lambda表达式浅析【C++学习笔记】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
lambda表達式淺析【C++學習筆記】
基本用法:
auto f = [/*捕獲列表*/](/*參數*/)->int /*后置返回值類型*/{/** 函數體*/};捕獲列表:
-
[] : 不捕獲任何變量
-
[變量名] : 表示值捕獲,不可修改
-
[=] :按值捕獲所有變量,不可修改
-
[&] : 按引用捕獲可以修改
-
[this] : 在類中捕獲,捕獲當前類的this指針,如果使用 = & 捕獲,則默認捕獲this指針
-
[& 變量名] :按引用捕獲該變量
-
[ = , & 變量名] ; 按值捕獲所有變量,但是按引用捕獲變量名變量,按引用捕獲的變量,每個前面都有寫一個&
-
[ &,變量名] : 按引用捕獲所有變量,但是按值捕獲變量名變量
lambda表達式延遲調用易錯點
int a = 12;auto f = [=]() ->int {return a;};a = 99;cout << f() << endl;輸出:
為什么輸出不是99呢?
因為在遇到auto f = [=]() ->int這一行時,a的值就已經被復制到lambda表達式中了
要避免這個錯誤可以使用按引用捕獲
lambda表達式類型
lambda表達式是閉包類型,可以理解成函數中的函數
編譯器會為每個lambda表達式生成一個類,和一個可調用類對象
lambda表達式用法介紹
vector<int> vec{ 12,23,435,56,76 };int isnums = 9;for_each(vec.begin(), vec.end(), [=](int& val){val -= isnums;});for (auto value : vec){cout << value << endl;}廣義lambda捕獲
解決lambda捕獲依賴于類對象問題
將m_object復制到閉包里面來
[ temp = m_object]() {return temp;};總結
以上是生活随笔為你收集整理的lambda表达式浅析【C++学习笔记】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis 五大数据类型的基本命令使用
- 下一篇: java-jdk各版本特性概述