理解C 14 中的泛型Lambda
在C 14 中引入,泛型lambda 提供了一種編寫可對任意值進行操作的lambda 表達式的方法類型。然而,問題出現了:這個機制是如何發揮作用的?
通用 Lambda 的實作
與 C 11 中的常規 lambda 不同,通用 lambda 在其內部使用模板化呼叫運算子閉合類型。當 [auto](https://en.cppreference.com/w/cpp/keyword/auto) 關鍵字出現在參數清單中時,編譯器會產生模板化呼叫運算符,而不是標準呼叫運算符。
範例:
auto glambda = [](auto a) { return a; };
此程式碼透過下列呼叫產生閉包類型運算子:
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
標準定義
標準🎜>呼叫運算子的傳回型別和函數參數是衍生的透過將每個[auto](https://en.cppreference.com/w/cpp/keyword/auto) 替換為發明的範本參數的lambda 的尾隨回傳類型和參數宣告子句name.
與C 模板與Java泛型的相似性
泛型 lambda 與 C 模板類似,因為編譯器會根據不同的參數類型產生獨特的函數在模板參數上。但是,它們與 Java 泛型不同,後者在運行時利用類型擦除來在編譯時維護類型資訊。另一方面,泛型 lambda 可以建立具有明確類型的靜態專用閉包。以上是C 14 中的通用 Lambda 是如何運作的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!