C 14 のジェネリック ラムダを理解する
C 14 で導入されたジェネリック ラムダは、任意の値を操作するラムダ式を作成する手段を提供します。タイプ。ただし、このメカニズムはどのように機能するのでしょうか?
ジェネリック ラムダの実装
C 11 の通常のラムダとは異なり、ジェネリック ラムダはテンプレート化された呼び出し演算子を使用します。開閉タイプ。 [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 によると、ジェネリック ラムダのクロージャー型の呼び出し演算子には次のプロパティがあります:
C テンプレートと Java ジェネリックの類似性
ジェネリック ラムダは、コンパイラが異なる引数の型に基づいて独自の関数を生成するという点で C テンプレートに似ています。テンプレートパラメータで。ただし、実行時に型消去を利用してコンパイル時に型情報を維持する Java ジェネリックとは異なります。一方、ジェネリック ラムダは、明示的な型を使用して静的に特殊化されたクロージャを作成します。
以上がC 14 のジェネリック ラムダはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。