Lambda 函數 - Lambda 函數是一個內聯函數,不需要在主程式範圍之外進行任何實作。
Lambda 函數也可以用作由要儲存的變數的值。 Lambda 可以稱為可以被函數呼叫的物件(稱為函子)。
每當編譯器遇到 lambda 函數的定義時,它通常會建立一個自訂的lambda 物件。
lambda 函數比普通函數具有更多功能,例如,它有一個捕獲方法來捕獲所使用的變數。然而,捕獲的變數被視為物件的成員。
有時 lambda 函數也被稱為“函數物件”,它有自己的作用域,可以作為普通函數內的參數傳遞。功能。 Lambda 函數有自己的生命週期。
[ ] - 捕獲
( ) - 參數(可選)
##→ -傳回值(可選)
{...} - 函數體。
lambda 語法[ ]( int a) -> int { return a-1 ;};
捕獲 – 捕獲是一個子句,透過它 lambda 函數可以存取特定作用域或巢狀區塊中可用的變數。
我們可以捕獲某個值透過使用兩種方法來取得可用變數:#按名稱擷取物件 – 按名稱擷取物件會產生該物件的本機副本lambda 函數。
int main(){ set s; //Adding the elements to set int i=20; for_each(s.begin(),s.end(), [i](T& elem){ cout<<elem.getVal()*i<<endl; } }在上面的範例中,透過建立 lambda 函數的本機副本來捕獲值。
透過引用來擷取物件 – 透過引用擷取物件可以操縱 lambda 函數的上下文。因此,函數物件或 lambda 函數捕獲的值可以更改。
int main(){ sets; //Adding elements to the set int result=0; for_each(s.begin(),s.end(), [&result](&T elem){ result+= elem.getVal();}); cout<<result<<endl; }成員函數內部的Lambda我們知道lambda 函數可以在任何普通函數內部用作參數。例如,
class func{ public: func(set<T>s): s1(s){} void func(){ remove_if(s1.begin(),s1.end(), [this](int i) ->bool {return (i<level);}); } private: set<T>s1; int result; };
以上是C/C++中Lambda函數的意義的詳細內容。更多資訊請關注PHP中文網其他相關文章!