式の中で暗黙の型変換が倍増するint型
-
22-09-2019 - |
質問
私は自分のコードで指定された定数を使用する場合、暗黙の型変換を削減しようとしてきました。一例ではなく、使用するための
const double foo = 5;
私が使用します。
const double foo = 5.0;
ので、型変換が行われている必要はありません。しかし、私はこのような何かを表現で...
const double halfFoo = foo / 2;
など。 2は整数として評価し、それが暗黙的に変換されていることですか?私が代わりに2.0を使用する必要がありますか?
解決
2
は、二重であるため、 foo
は、暗黙的にdoubleに変換されます。あなたはfoo
であった場合、たとえば、整数、整数の除算が実行されると、結果がhalfFoo
に格納されるので注意する必要があります。
私は彼らが浮動小数点値として使用されるために、あなたが意図しどこ常に浮動小数点リテラル(例えば2.0
または2.
を使用することをお勧めだと思います。それは、より一貫性のある最大切り抜くことができ悪質なバグを見つけるためにあなたを助けることができますこの種のものでます。
他のヒント
これはタイプ強制するとして知られています。
:ウィキペディアはそれについての素晴らしいビットを持っていますまた、強制として知ら暗黙の型変換は、コンパイラによる自動型変換です。一部の言語では許可、あるいは強制を提供するために、コンパイラが必要です。
プログラムが正しく実行されるように、実行時に必要に応じては混合型の式では、一の以上のサブタイプのデータは、スーパータイプに変換することができます。
...
意図しない結果が生じる可能性があるとして、この動作は、注意して使用する必要があります。浮動小数点値の小数成分が切り捨てられるように、浮動小数点表現を積分表現に変換する際のデータは、(切り捨て)失われる可能性があります。逆に、浮動小数点のいずれかに積分表現から変換することも失う精度は、浮動小数点型ため正確整数を表すことができないかもしれことができる(例えば、フロートは表現できないIEEE 754単精度型かもしれません16777217整数正確に、32ビット整数型ながら缶)。これは、整数型と等しいかどうか比較した場合、戻り偽型実数の二つの変数に同じ整数値を格納するような状況につながることができます。
はCとC ++の場合には、整数型(すなわちlong型、整数、ショーツ、文字)の式の値は、式で最大の整数型です。私はわからないんだけど、私は似たようなを想像することは浮動小数点数を含む式と(仮定浮動小数点値は、整数型よりも「大きな」です)起こります。
は厳密に言えば、何を達成しようとしていることは逆効果であると考えられます。
通常は、一方がソースコード内のすべての任意のタイプの依存性を低減するために、一般的には、Cプログラムで明示的なの型変換の数を減らすとする努力であろう。グッドCコードは、できるだけ種類に依存しないようにする必要があります。多くの場合、できるだけ具体的なタイプを綴る明示的な構文要素を回避するために、良いアイデアであることを一般的に意味します。それはやる方が良いです。
const double foo = 5; /* better */
よりも
const double foo = 5.0; /* worse */
後者は冗長であるためです。 C言語の暗黙の型変換規則は、前者正常に動作を確認します。同じことが比較について語ったことができます。この
if (foo > 0)
よりも優れています
if (foo > 0.0)
なぜなら、再び、前者はより多くの種類に依存しています。
この場合、暗黙の型変換は非常に良いこと、悪いことではないです。それはあなたがジェネリック型に依存しないコードを書くことができます。なぜあなたはそれらを避けるためにしようとしている?
(ように使用2.0
の代わりに、2
など)いくつかのケースでは、あなたが他の選択肢を持っていないが、明示的にタイプを表現することは事実です。しかし、通常、1は1つが本当にしている場合にのみ、それを行うだろう。誰かが本当の必要がなく、それを行うだろう、なぜ私を超えている。