[轉]C++11中的Lamda


 [轉載]http://coolshell.cn/articles/5265.html/comment-page-1 

 Lambda表達式來源於函數式編程,說白就了就是在使用的地方定義函數,有的語言叫“閉包”,如果 lambda 函數沒有傳回值(例如 void ),其回返類型可被完全忽略。 定義在與 lambda 函數相同作用域的變量參考也可以被使用。這種的變量集合一般被稱作 closure(閉包)。

[capture](parameters)->return_type {body}

 [捕獲參數列表](參數列表)->返回類型{函數體}

1.capture 有傳值和傳引用2種方式

2.函數的調用參數列表

3.如果沒有指定返回類型,則默認為void

   所以,C++引入Lambda的最主要原因就是1)可以定義匿名函數,2)編譯器會把其轉成函數對象。相信你會和我一樣,會疑問為什么以前STL中的ptr_fun()這個函數對象不能用?(ptr_fun()就是把一個自然函數轉成函數對象的)。原因是,ptr_fun() 的局限是其接收的自然函數只能有1或2個參數。

那么,除了方便外,為什么一定要使用Lambda呢?它比傳統的函數或是函數對象有什么好處 呢?我個人所理解的是,這種函數之所以叫“閉包”,就是因為其限制了別人的訪問,更私有。也可以認為他是一次性的方法。Lambda表達式應該是簡潔的, 極私有的,為了更易的代碼和更方便的編程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM