ホームページ  >  記事  >  バックエンド開発  >  「constexpr」関数の関数パラメータを定数式として使用できないのはなぜですか?

「constexpr」関数の関数パラメータを定数式として使用できないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-22 00:28:14473ブラウズ

Why Can't I Use a Function Parameter in a `constexpr` Function as a Constant Expression?

定数式では 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 サイトの他の関連記事を参照してください。

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