Consteval 関数は関数の引数に応じたテンプレート パラメーターを有効にできますか?
C 17 では、コンパイル時定数を返す constexpr 関数を定義します論理的に思えるかもしれませんが、それは禁止されています。コンパイラはランタイム実行命令を要求し、そのような関数が関与するテンプレートのインスタンス化を防ぎます。
C 20 では consteval 関数が導入され、コンパイル時の評価が保証されます。これにより、多くの人がこの制約がなくなり、次のようなコードが使用可能になると予想していました。
<code class="cpp">consteval int foo(int i) { return std::integral_constant<int, i>::value; }</code>
しかし、論文の潜在的な変更にもかかわらず、答えは依然として断固としてノーです。
ただし、テンプレート以外の関数定義は 1 回しか入力されないという事実は変わりません。このようなコードを許可すると、std::integral_constant
論文では、パラメータを扱うべきではないことも示唆しています。コア定数式として。 1 つの例がこれを示しています。
<code class="cpp">consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, } // but that's okay.</code>
要約すると、型付けの不一致が発生する可能性があるため、関数パラメーターは定数式に進化しません。
以上がConsteval 関数のために関数パラメーターはテンプレートに依存する可能性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。