9

だから私はよくこのようなものを見ます:

#define gf_PI  f32(3.14159265358979323846264338327950288419716939937510)
#define gf_PIhalf  f32(3.14159265358979323846264338327950288419716939937510 * 0.5)

これは、コードでgf_PIhalfを使用するたびに、PI値の半分が計算されることを意味します。
代わりに、文字通り半分のPIの値を書く方が良いのではないでしょうか。

次のことを行うのがさらに良いのではないでしょうか。

#define gf_PI f32(3.14159265358979323846264338327950288419716939937510)
const float gf_PIHalf = gf_PI * 0.5f;    // PIHalf is calculated once

最後に、このようにするのが最善ではないでしょうか(そしてなぜそれが一般的な方法ではないように思われるのか):

const float gf_PI = 3.14159265358979323846264338327950288419716939937510;
const float gf_PIHalf = gf_PI * 0.5f;
4

2 に答える 2

11

これは、コードでgf_PIhalfを使用するたびに、PI値の半分が計算されることを意味します。

いいえ、ありそうにありません。

実行時ではなく、コンパイル時にその乗算を実行することをコンパイラに合理的に頼ることができます。

于 2013-02-28T22:00:16.107 に答える
3

#defineバージョンがコンパイル時にほぼ確実に解決され、types const globalsが一般的ではないことを除けば、結論はやや正しいです。これらは、現代の優れたコードでは一般的な方法です。#definesはこの使用のためにほとんど死んでいます。ベストプラクティスは、名前のない名前空間でファイルスコープグローバルを定義することです。

namespace
{
    const float g_SomeGlobal = 123.456f;
}

これにより、翻訳ユニットの外部の人が「見る」ことができなくなりますg_SomeGlobal

于 2013-02-28T22:02:12.693 に答える