ホームページ >バックエンド開発 >C++ >Lambda 関数は C の `constexpr` で使用できますか?

Lambda 関数は C の `constexpr` で使用できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-02 09:51:02454ブラウズ

Can Lambda Functions Be Used with `constexpr` in C  ?

Lambda 関数と Constexpr

質問: C の lambda 関数で constexpr を使用することは可能ですか?

次のコード例では、コンパイラは constexpr 関数の要求に関連するエラーを報告します:

<code class="cpp">struct Test
{
  static const int value = []() -> int { return 0; } ();
};</code>

Answer:

Update ( C 17): C 17 以降、ラムダ関数は定数式で使用できます。

C 17 より前: ラムダは現在、C 14 の定数式で使用できません。 、特定のラムダ式とクロージャ オブジェクトを定数式に含めることを許可する提案 (N4487) が作成されました。

この提案が受け入れられると、次の変更が導入されます:

  • クロージャ型は、そのデータ メンバーがすべてリテラル型である場合、リテラル型とみなされます。
  • ラムダ宣言子に constexpr 指定子が指定されていない場合、constexpr の要件を満たしていれば、生成される関数呼び出し演算子は constexpr になります。 function.

この変更は、暗黙的に定義されたコンストラクターおよび代入演算子関数の動作に合わせて行われ、必要に応じて constexpr として推論できます。

以上がLambda 関数は C の `constexpr` で使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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