我在MSDN頁面上閱讀了這個解釋,瞭解了函數和函數指針相對於lambda表達式的優點。 「保留國家」的能力是什麼意思?它是否與通過ref或value在封閉範圍中捕獲一些變量的能力有關?C++'保留狀態'是什麼意思?
http://msdn.microsoft.com/en-us/library/dd293608.aspx
在編寫代碼時,你可能會使用函數指針和功能 對象來解決問題和進行計算。功能 指針和函數對象有優點和缺點: 函數指針涉及最小的語法開銷,但它們不在 保留一個範圍內的狀態;函數對象可以保持狀態,但是它們需要類定義的語法開銷。
Lambda表達式是一種編程技術,它結合了函數指針和函數對象的好處,並且避免了其缺點。 Lambda表達式非常靈活,並且可以保持 狀態,就像函數對象一樣,並且它們的緊湊語法將刪除需要函數對象所需的類定義的 。 Lambda表達式使您能夠編寫代碼不那麼麻煩 並且比等效的函數對象更不容易出錯。
以下示例將lambda表達式的使用與使用函數對象的 進行了比較。第一個示例使用lambda表達式 向控制檯打印矢量對象中的每個元素是否爲偶數或奇數的 。第二個示例使用函數對象來完成相同的任務 。
您能指出一些相關的主題範圍,狀態,維護狀態,lambda表達式的優點嗎?
感謝和問候
哼......你不需要在lambda定義的某個地方使用'mutable'來工作嗎? –
@MatthieuM。是的,謝謝。我幾乎總是通過參考來捕捉,所以我忘了這一點。 –
@BenjaminLindley但是,當通過引用捕獲時,您需要一個可修改的引用對象的修改,不是嗎? –