ホームページ >バックエンド開発 >C++ >Lambda 関数は「constexpr」コンテキストで使用できますか?

Lambda 関数は「constexpr」コンテキストで使用できますか?

DDD
DDDオリジナル
2024-10-31 00:30:291043ブラウズ

 Can Lambda Functions Be Used in `constexpr` Contexts?

Lambda 関数の constexpr サポート

lambda 関数の constexpr サポートは、C コミュニティで広く議論されているトピックです。 [expr.const]/(2.6) に従って定数式ではラムダは現在許可されていませんが、作業草案 N4582 に含まれている N4487 では、この制限を削除することが提案されています。

提案されたラムダ-関連する変更:

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

例:

次の例は、N4487 が受け入れられると有効になります:

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

回避策:

constexpr サポートが正式に追加される前の回避策として、以下を使用できます。ラムダの代わりに関数テンプレート:

<code class="c++">struct Test
{
  template <typename>
  static const int value = 0;
};</code>

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

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