首頁 >後端開發 >C++ >C/C++中Lambda函數的意義

C/C++中Lambda函數的意義

WBOY
WBOY轉載
2023-09-02 19:33:081455瀏覽

C/C++中Lambda函數的意義

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中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除