ホームページ >バックエンド開発 >C++ >C 14 のジェネリック ラムダはどのように機能しますか?

C 14 のジェネリック ラムダはどのように機能しますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-06 00:53:11144ブラウズ

How Do Generic Lambdas in C  14 Work?

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 によると、ジェネリック ラムダのクロージャー型の呼び出し演算子には次のプロパティがあります:

  • 各出現箇所パラメータ リストの [auto](https://en.cppreference.com/w/cpp/keyword/auto) は、作成された型テンプレート パラメータに対応します。
  • 呼び出し演算子の戻り値の型と関数パラメータが派生されます。各 [auto](https://en.cppreference.com/w/cpp/keyword/auto) を、作成されたテンプレート パラメーターに置き換えることにより、ラムダの末尾の戻り値の型とパラメーター宣言節から取得します。 name.

C テンプレートと Java ジェネリックの類似性

ジェネリック ラムダは、コンパイラが異なる引数の型に基づいて独自の関数を生成するという点で C テンプレートに似ています。テンプレートパラメータで。ただし、実行時に型消去を利用してコンパイル時に型情報を維持する Java ジェネリックとは異なります。一方、ジェネリック ラムダは、明示的な型を使用して静的に特殊化されたクロージャを作成します。

以上がC 14 のジェネリック ラムダはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。