目次
概要
C++ では、異なる型の変数へ値を代入した際に暗黙の型変換(implicit conversion)が発生します。整数型へ小数リテラルを代入すると小数部が切り捨てられるため、意図しない値になる場合があります。本稿では、整数型と浮動小数点型への代入を比較し、型変換が出力に及ぼす影響を確認いたします。
サンプルコード
// 型変換を伴う値の代入を確認するサンプル
#include <iostream>
int main(int /*argc*/, char* /*argv*/[])
{
int height; // 整数型変数
double velocity; // 倍精度浮動小数点型変数
height = 9.81; // 小数部が切り捨てられ整数 9 となる
velocity = 9.81; // 小数部を保持したまま代入される
std::cout << "変数 height の値は " << height << " です。" << '\n';
std::cout << "変数 velocity の値は " << velocity << " です。" << '\n';
return 0;
}
コード解説
行 | 説明 |
---|---|
2 | #include <iostream> で標準入出力ストリームを利用できるようにします。 |
4 | main 関数がプログラムの開始点です。引数は未使用のためコメントで抑止します。 |
6 | int height; により整数型の変数を宣言します。 |
7 | double velocity; により浮動小数点型の変数を宣言します。 |
9 | height = 9.81; で暗黙の型変換が行われ、小数部が失われ整数 9 が格納されます。 |
10 | velocity = 9.81; では小数部を含む値がそのまま代入されます。 |
12 | 変数 height の内容を出力し、整数値のみが表示されることを確認します。 |
13 | 変数 velocity の内容を出力し、小数部が保持されていることを確認します。 |
15 | return 0; は正常終了を示します。 |
応用
暗黙の型変換は利便性を高める一方、意図しないデータ損失の原因にもなります。精度が重要な計算では、明示的なキャスト(static_cast など)を用いて型変換の可読性と安全性を確保することが推奨されます。加えて、初期化子リスト(int height{9.81};
)を利用すると、コンパイル時に不適切な変換を検知できるため、バグの早期発見に役立ちます。
まとめ
整数型へ小数リテラルを代入すると小数部が切り捨てられ、期待とは異なる値が保存される場合があります。型に応じた値を代入するか、明示的なキャストや初期化子リストを用いることで変換ミスを防ぐことが可能です。本記事で示した例を参考に、変数宣言時には適切なデータ型と代入方法を検討してください。