C++11 lambda表達式是如何實現的?


lambda表達式是如何實現的呢?


其實是編譯器為我們了創建了一個類,這個類重載了(),讓我們可以像調用函數一樣使用。所以,你寫的lambda表達式和真正的實現,是這個樣子的:

而對於捕獲變量的lambda表達式來說,編譯器在創建類的時候,通過成員函數的形式保存了需要捕獲的變量,所以看起來是這個樣子:

似乎也沒有什么神奇的地方。但正是由於編譯器幫我們實現了細節,使我們的代碼變得優雅和簡潔了許多。

參考資料

http://www.cprogramming.com/c++11/c++11-lambda-closures.html
http://www.drdobbs.com/cpp/lambdas-in-c11/240168241
https://en.wikipedia.org/wiki/Closure_(computer_programming)
http://www.jellythink.com/archives/771
http://en.cppreference.com/w/cpp/utility/functional/function
https://en.wikipedia.org/wiki/First-class_function
https://blog.feabhas.com/2014/03/demystifying-c-lambdas/


免責聲明!

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



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