C++14 lambda 教程

sunbiaobiao發表於2014-09-17

C++ 14剛在上個月通過,C++14給C++11帶來了一些令人期待的改變,例如允許auto作為一個函式的返回型別,還有泛型lambdas,這也是我們這篇文章的主題。

C++11 引入了 Lambdas,它意味著你可以把程式碼寫的更短,匿名的函式,而不用一個函式,避免了建立一個單獨的類和單獨的函式定義,這裡有一個典型的C++11中lambda的使用例子,返回一個數字的平方,

如果你想在很多地方使用這個程式碼片段,你可以把它儲存到一個變數中

你可以想到上面的程式碼會出什麼問題了嗎,它只是針對整數型別,如果你想把這個函式用在double或者複數型別的數字,像這樣

這裡明顯只能使用模板

很顯然,我們這裡不是尋求這種解決方案,上面的這個函式不是匿名的,而是一個全域性的函式,

C++14 標準中引入了泛型lambda的概念,允許我們使用auto來定義lambda的引數型別,我們可以寫一個更短的更優雅的程式碼

下面是完整一點的程式碼

上面的程式碼可以使用主流的C++編譯器編譯,像GCC4.9x, 或者Clang,下面是一個在OSX上使用GCC和Clang編譯執行的結果

然而,真正泛型lambda的發光點是和STL結合使用的時候,如果你想以遞減的順序對一個vector排序,使用泛型lambda,我們可以這樣寫:

下面是完整的程式碼

下面是執行編譯的結果

相關文章