首頁 > 後端開發 > C++ > C 14 中的通用 Lambda 是如何運作的?

C 14 中的通用 Lambda 是如何運作的?

Susan Sarandon
發布: 2024-12-06 00:53:11
原創
141 人瀏覽過

How Do Generic Lambdas in C  14 Work?

理解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; }
};
登入後複製

標準定義

標準🎜>
  • 依C 14 標準草案n3690 的第5.1.2/5 段,泛型lambda 閉包類型的呼叫運算子具有以下屬性:
  • 每次出現參數清單中的[auto](https://en.cppreference.com /w/cpp/keyword/auto)對應的是一個發明的型別模板參數。

呼叫運算子的傳回型別和函數參數是衍生的透過將每個[auto](https://en.cppreference.com/w/cpp/keyword/auto) 替換為發明的範本參數的lambda 的尾隨回傳類型和參數宣告子句name.

與C 模板與Java泛型的相似性

泛型 lambda 與 C 模板類似,因為編譯器會根據不同的參數類型產生獨特的函數在模板參數上。但是,它們與 Java 泛型不同,後者在運行時利用類型擦除來在編譯時維護類型資訊。另一方面,泛型 lambda 可以建立具有明確類型的靜態專用閉包。

以上是C 14 中的通用 Lambda 是如何運作的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板