lambda函式是指簡單的**片段,通常認為是不值得命名的函式,它不能重複使用,能方便程式設計師使用,增強**可讀性,降低**出錯概率。
[ 捕獲列表 ]
(引數)
-> 返回型別
編譯器通常會計算lambda函式的返回型別,所以一般不需要指定返回型別,但少數情況編譯器可能無法判斷返回型別,還是需要指定返回型別。
c++定義了許多標準庫函式,比如std::for_each,用來迴圈
int
main()
; std::
for_each
(v.begin()
, v.
end(),
print()
);return
0;
如果只是在特定的地方使用一次的函式,還要編寫乙個完整的方法就會顯得繁瑣。
對於上面的這種使用場景,我們可以使用lambda函式來實現。
std::
for_each
(v.begin()
, v.
end(),
(int element)
);
[
&i](
)struct anonymous
inline
auto
operator()
()const
}
編譯器為每個lambda函式生成了如上的唯一閉包,捕獲列表將成為閉包中建構函式的引數,如果是按引用捕獲,那麼對應資料型別的成員會在閉包中建立。
lambda函式對**的效能沒有影響,反而能夠使**結構更加緊湊、易讀,**的編寫更加方便。
int
main()
;print()
;return0;
}
上面的**可以輸出
auto
main()
::(anonymous class)::
operator()
()const
:100
,200
捕獲列表
意義[ ] ( )
不捕獲外接變數
[=] ( )
所有都按值捕獲
[&] ( )
所有都按引用捕獲
[x] ( )
x按值捕獲
[&x] ( )
x按引用捕獲
[&,x] ( )
x按值捕獲,其它的按引用捕獲
[=,&x] ( )
x按引用捕獲,其它的按值捕獲
std::vector<
int> v1;
int total =0;
int value =5;
std::
for_each
(begin
(v1)
,end
(v1),[
&, value]
(int x)
);
在這個例子中,value會被按值捕獲,會儲存乙份拷貝的值,total會以引用的方式捕獲,
可以使用auto幫助儲存lambda函式
auto lambda_func_1 =[&
](int x)
;
auto removelistenerinvector =[&
](std::vector>
* listeners)
if(_indispatch ==0)
else
isfound =
true
;break;}
}};
還可以把lambda函式儲存在變數、陣列和vector中,把他們當作命名引數來傳遞
#include
#include
#include
double
eva(std::function<
double
(double
)> f,
double x =
2.0)
intmain()
;auto f1 =
(double x)
; std::cout <<
eva(f0)
<<
"\n"
; std::cout <<
eva(f1)
<<
"\n"
;return0;
}
C語言的函式到底是什麼
文章目錄 前言 一 什麼是函式?1.函式是乙個固定的乙個程式段,或稱其為乙個子程式。2.特徵 有三部分組成,除了可以實現固定運算功能,還有乙個入口和乙個出口 二 怎麼使用函式?1.函式的定義 2.函式的宣告 3.函式的呼叫和return語句 4.函式定義和宣告的辨析 二 函式使用示例 1.max函式...
REST,RESTful到底是個什麼?
0.rest不是 rest 這個單詞,而是幾個單詞縮寫。但即使那幾個單詞說出來,也無法理解在說什麼 不是要貶低人,是我自己也理解困難 1.rest描述的是在網路中client和server的一種互動形式 rest本身不實用,實用的是如何設計 restful api rest風格的網路介面 2.ser...
Python中的id函式到底是什麼?
python官方文件給出的解釋是 id object cpython implementation detail this is the address of the object in memory.由此可以看出 1 id object 返回的是物件的 身份證號 唯一且不變,但在不重合的生命週期裡...