定数式では constexpr 関数の関数パラメーターを使用できません
提供されたコード スニペットは、constexpr 関数 make_const と関数を示しています非定数式で make_const を使用しようとする t1。 t1 の i は定数式ではないため、エラーが発生します。
constexpr 関数は、定数引数が指定されている場合、コンパイル時に評価できます。ただし、constexpr 以外のパラメータが constexpr 関数に渡された場合、そのパラメータは定数式にはなりません。
以下のコードでは、t1 は constexpr 関数ですが、t1 内の make_const(i) はi は定数ではないため、定数式ではありません:
constexpr int t1(const int i) { return make_const(i); }
更新されたコードは、t1 が constexpr として宣言できることを示しています。そして、make_const の結果を返します:
constexpr int t1(const int i) { return make_const(i); }
ただし、do_something
template<int i> constexpr bool do_something(){ return i; } constexpr int t1(const int i) { return do_something<make_const(i)>(); }
要約すると、constexpr 関数のパラメーターは定数式である必要があります。非定数パラメータが渡された場合、それは constexpr 関数内で定数式になりません。
以上が「constexpr」関数の関数パラメータを定数式として使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。