2016-05-31 15 views
4

Iは、フロートまたは32ビットのUINTのいずれかとして定数を定義することができる:floatをintにキャストするか、intをfloatにキャストしますか?

const float SecondsPerMinute = 60.0F; 

又は

const uint32 SecondsPerMinute = 60U; 

CONSTは、INTを期待するいくつかの式で使用されると予想されるいくつかの式浮く。コンパイラと静的解析ツールを幸せにしたいので、必要に応じて適切な型にstatic_castします。

constをfloatとして定義してintにキャストするか、intとして定義してfloatにキャストする方が良いですか?それは違いをもたらすのでしょうか、それとももっと個人的な意見ですか?

たとえば、定数がintとfloatとして同じ回数使用されているとします。

+3

、あなたの静的解析ツールを支援していません。 –

+5

floatと定義した場合、intを必要とする各方程式では、intとしてキャストします(逆も同様です)。だから、int型とfloat型の2つの定数を定義し、必要に応じて使用してみませんか?これは他のどの代替手段よりも優れていない場合、同じ性能を確実に与えるでしょう。コードサイズが大きくなるという欠点しかありません。 – Nishant

+0

どちらの方向にも変換に情報が失われることはありません(両方の表現が正確です)。どちらの方向にもキャストは必要ありません。だから、それはまったく問題ではありません。 –

答えて

11

どのテンプレートについて:

template <typename T> 
constexpr T SecondsPerMinute = T(60); 

は使用法:あなたは60Fに60Uを変換するには役に立たないキャストを追加する必要がある場合

std::printf("%d %f", SecondsPerMinute<int>, SecondsPerMinute<double>); 
+0

[デモ](http://ideone.com/QQhX7u) –

+0

これは素晴らしいことです。私は最後の10分を同じことをしようと過ごしました。そして、私は10行以上のコードでは動作しません。ありがとう! –

+1

私はこれがこの問題の大きな解決策であり、多くの同様のシナリオに拡張可能であると考えています。ありがとう! –

関連する問題