C クラスの非整数静的定数: なぜダメなのでしょうか?
C では、クラスの静的 const メンバーを非整数にすることはできません種類。この言語では int や unsigned などの整数型が許可されているため、この動作は不可解に思えるかもしれません。
理由
この制限の根本的な理由は、最適化の考慮事項にあります。整数型の場合、コンパイラは多くの場合、定数値を周囲のコードに直接インライン化することで最適化します。これにより、これらの定数のメモリ アドレスが不要になり、変数のオーバーヘッドが削減されます。
ただし、double のような非整数型の場合、コンパイラは常にそのようなインライン化を実行できるわけではありません。これは、非整数型の演算には浮動小数点計算が必要になる場合があり、これは簡単には最適化できないためです。その結果、コンパイラは定数のメモリ アドレスを作成し、変数を通じてアクセスする必要があります。
例
次のコードを考えてみましょう:
<code class="cpp">class No_Good { static double const d = 1.0; };</code>
ここでは、double 値には浮動小数点演算が必要なため、コンパイラは定数 d をインライン化できません。したがって、d のメモリ アドレスを作成する必要がありますが、これは C 標準では許可されていません。
解決策
この制限を回避するには、定数を次のように宣言できます。静的メンバーではなく関数です。例:
<code class="cpp">class Now_Good { static double d() { return 1.0; } };</code>
これにより、コンパイラは定数のセマンティクスを維持しながら、可能な場合に d の値をインライン化できます。
以上がなぜ C クラスは非整数の静的定数を持てないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。