Constexpr 引数に基づく関数のオーバーロード
引数の constexprness に基づく関数のオーバーロードは、C 11 のプログラマが直面する制限です。これは、意味します。同じシグネチャを持つ 2 つの関数を定義することはできませんが、1 つは constexpr で、もう 1 つは constexpr ではありません。
標準に準拠した C 11 実装では、そのようなオーバーロードは許可されておらず、この制限は意図的に強制されました。ただし、この問題は C 標準の以降のバージョンで認識され、対処されました。
C 17 では、「constexpr lambdas」の概念が導入され、この問題の回避策が提供されました。 Constexpr ラムダを使用すると、コンパイル時に実行でき、constexpr 引数を受け入れることができる匿名関数を作成できます。
さらに、C 20 以降では、「2 フェーズ ルックアップ」として知られる新しいオーバーロード解決ルールのセットが使用されます。が実装されました。これらのルールは、constexpr 引数を使用して関数を呼び出すときに constexpr 関数を優先し、constexpr に基づいて関数のオーバーロードを効果的にシミュレートします。
constexpr ラムダを利用するか、C 20 以降の新しいオーバーロード解決ルールに従うことで、プログラマは次の機能を実現できます。
例:
以上がC は Constexpr の引数に基づいて関数のオーバーロードにどのように対処しましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。