匿名函式
c++在c11標準中引入了匿名函式,即沒有名字的臨時函式,又稱之為lambda表示式.lambda表示式 實質上是建立乙個匿名函式/物件
基本格式
[caputrue]
(params)opt-
>ret
;[函式物件引數]
(操作符過載函式引數)
mutable 或 exception 宣告 -
> 返回值型別
比如說(
);對於匿名函式,一般用於傳函式引數,當然也可以直接定義呼叫.
auto pfun=()
//這裡使用auto自動判斷型別 其實是函式指標
pfun()
;//呼叫這個函式12
或者直接在這裡呼叫就行 最後的那個(
)表示呼叫函式,如果有實參可以放進來.
匿名函式呼叫
各個部分說明
函式物件引數(不可省略)
不擷取任何變數
[&] 擷取外部作用域中所有變數,並作為引用在函式體中使用
[=] 擷取外部作用域中所有變數,並拷貝乙份在函式體中使用
[=,&foo] 擷取外部作用域中所有變數,並拷貝乙份在函式體中使用,但是對foo變數使用引用
[bar] 擷取bar變數並且拷貝乙份在函式體重使用,同時不擷取其他變數
[this
] 擷取當前類中的this指標。如果已經使用了&或者=就預設新增此選項。
過載引數列表
呼叫的時候需要傳遞的引數(引數可以預設) 下面呼叫的時候括號裡面的3會賦值給形參x,y用預設值2.
帶引數的匿名函式
返回型別(可以自動推導 可以省略)
auto fun =
(int x,
int y)
->
int;
對於這裡的-
>
int 這個int就是返回值型別,如果有返回值型別需要在前面加上-
>
直接省略寫成這種格式也可以(
int x,
int y)
函式體lambda表示式的函式體中可以和普通函式一樣寫,可以使用捕獲的引數,寫這個函式實現的具體步驟.
函式選項opt (可以省略)
可以填mutable
,exception,attribute
mutable 表示函式體可以修改捕獲變數的,同時可以訪問捕獲物件的非常屬性成員函式
exception說明lambda表示式是否丟擲異常以及何種異常
attribute用來宣告屬性
補充說明:
按值捕獲的時候,得到的是當前的值,如果想得到實時的值,建議使用引用
#include
using
namespace std;
intmain()
;//lambda表示式
ptr();
//呼叫函式
auto fun =
(int x,
int y)
->
int;
//帶引數的lambda表示式
// 這裡的->後面寫的是返回值型別
auto z=
fun(3,
4); cout << z << endl;
cin.
get();
return0;
}
LAMDA表示式學習
1.普通繫結 public void button1 click object sender,eventargs e this.button1.click button1 click 2.匿名委託 this.button1.click delegate object sender,eventargs...
lamda表示式學習
lamda表示式 格式 形參列表 作用 簡化匿名方法的書寫,可用在任何可使用匿名方法和強型別 的地方 例子 using system using system.collections.generic using system.linq using system.text namespace lamd...
python的lamda表示式
學習python時看到了這個函式 對裡面的lamda表示式產生了疑問。經過一番查詢,對lamda表示式理解如下 lamda看似是表示式,其實是乙個函式,冒號前是傳入的引數,冒號後是表示式,return將返回它的值。可以用來代替乙個簡單的函式,減少 篇幅 例1 def sum x,y return x...