[轉載]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表達式應該是簡潔的, 極私有的,為了更易的代碼和更方便的編程。