関数の引数に依存する Consteval 関数とテンプレート パラメーター
C 17 では、コンパイラが依然として機能するため、テンプレート パラメーターは関数の引数に依存できません。非 constexpr 関数は、コンパイル時に評価される場合でも、実行時命令を生成する必要があります。
C 20 Consteval 関数
C 20 では、consteval 関数が導入されています。実行時の制約を削除して、コンパイル時に評価する必要があります。ただし、疑問は残ります: これは、テンプレート パラメーターが関数の引数に依存できるようになったことを意味しますか?
依存するテンプレート パラメーターに対する許可はありません
consteval 関数の導入にもかかわらず、答えはノーです。この文書では、パラメータがコア定数式として扱われることを意図していないことを認めています。これは、論文の例で示されているように、潜在的な型付けの不一致が原因です。
consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, } // but that's okay.
したがって、関数パラメータは定数式とはみなされず、テンプレート パラメータが定数式に依存することはありません。
以上がテンプレート パラメーターは C 20 Consteval 関数の関数の引数に依存できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。