暗黙の型変換と明示的型変換
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/06/07 23:27 UTC 版)
「型変換」の記事における「暗黙の型変換と明示的型変換」の解説
暗黙の型変換は、明示的に指定しなくてもコンパイラの判断によって自動的に行われる型変換で、型強制(type coercion)ともいう。逆に、明示的に指定して行う型変換を明示的型変換という。 暗黙の型変換では、たとえばある式の中に複数の型の変数がある場合、すべての変数を最も上位の型に変換する。 double d;long l;int i;/* ... */if (d > i) d = i;if (i > l) l = i;if (d == l) d *= 2; このC言語のコードでは、dとlとiは異なったデータ型をもっているので、すべての演算は自動的に同じ型に変換された後に行われる。より大きなサイズの型に変換されることを拡大変換 (widening conversion) と呼び、より小さなサイズの型に変換されることを縮小変換 (narrowing conversion) と呼ぶ。 暗黙の型変換には注意しなければならないこともある。たとえばdouble型(浮動小数点数)の値をint型(整数型)の変数に代入する場合、小数点以下の端数があったり、元の値がint型で表現できる範囲を超えていたりすると、縮小変換により情報の一部が失われてしまう。浮動小数点数特有の誤差により、意図せず切り捨てられてしまうこともありうる。また、符号付き整数と符号無し整数との間の暗黙変換に関しても、同様に情報が失われたり、整数オーバーフローにより意図しない値になってしまったりする可能性がある。C言語およびC++では暗黙の縮小変換を許しているが、情報が失われる可能性のある変換に対して、通例コンパイラが警告を出す。JavaやC#などの後発言語では、暗黙の縮小変換を許可せず、後述するキャスト (cast) 構文による明示的な変換が必要となる。さらに型の扱いが厳密なF#などの関数型言語では、暗黙の拡大変換も許可せず、キャスト構文による明示的な型変換が必要となる。
※この「暗黙の型変換と明示的型変換」の解説は、「型変換」の解説の一部です。
「暗黙の型変換と明示的型変換」を含む「型変換」の記事については、「型変換」の概要を参照ください。
- 暗黙の型変換と明示的型変換のページへのリンク