ホームページ  >  記事  >  バックエンド開発  >  Consteval 関数のために関数パラメーターはテンプレートに依存する可能性がありますか?

Consteval 関数のために関数パラメーターはテンプレートに依存する可能性がありますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-23 17:46:41153ブラウズ

Can Function Parameters Be Template Dependent Because of Consteval Functions?

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 のような ODR に適さない型の変数の宣言が可能になる可能性があり、これは非常に望ましくないことです。

論文では、パラメータを扱うべきではないことも示唆しています。コア定数式として。 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 サイトの他の関連記事を参照してください。

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