Lambda 関数を使用した Constexpr: 現状と将来の展望
C では、 constexpr を使用すると、コンパイル時にコンパイラーによる式の評価が可能になります。ただし、ラムダ関数のサポートは注目を集めています。
歴史的に、C 14 では定数式内のラムダ関数を禁止していました。さまざまなコンテキストで constexpr を強制する試みは失敗に終わりました。
しかし、C 17 による N4487 の受け入れにより、大きな進歩が見られました。この提案では、特定の条件下で定数式のラムダ式が許可されます:
1。正しいラムダ式構文:
constexpr でラムダを使用する場合は、ラムダが constexpr として宣言されていることを確認してください。これにより、ラムダを定数式として扱う必要があることがコンパイラに通知されます。
2.リテラル型としてのクロージャ型:
ラムダ式を定数式で使用するには、そのクロージャ型 (ラムダによって作成されるオブジェクトの型) がリテラル型である必要があります。これは、すべてのデータ メンバーもリテラル型でなければならないことを意味します。
3. Constexpr 推論:
ラムダ宣言で constexpr 指定子が省略されている場合、constexpr 関数の要件を満たしていれば、関数呼び出し演算子は constexpr であると推論されます。暗黙的なコンストラクターと代入演算子と同様です。
4.将来の展望:
C 17 の実装により、ラムダ関数を定数式で使用できるようになりました。 C が進化するにつれて、将来のリビジョンではこのサポートがさらに拡張され、定数時間シナリオにおけるラムダのより複雑で多用途なユースケースが可能になる可能性があります。
以上がC の Constexpr で Lambda 関数を使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。