C++ の代入時に生じる暗黙の型変換に注意する

目次

概要

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> で標準入出力ストリームを利用できるようにします。
4main 関数がプログラムの開始点です。引数は未使用のためコメントで抑止します。
6int height; により整数型の変数を宣言します。
7double velocity; により浮動小数点型の変数を宣言します。
9height = 9.81; で暗黙の型変換が行われ、小数部が失われ整数 9 が格納されます。
10velocity = 9.81; では小数部を含む値がそのまま代入されます。
12変数 height の内容を出力し、整数値のみが表示されることを確認します。
13変数 velocity の内容を出力し、小数部が保持されていることを確認します。
15return 0; は正常終了を示します。

応用

暗黙の型変換は利便性を高める一方、意図しないデータ損失の原因にもなります。精度が重要な計算では、明示的なキャスト(static_cast など)を用いて型変換の可読性と安全性を確保することが推奨されます。加えて、初期化子リスト(int height{9.81};)を利用すると、コンパイル時に不適切な変換を検知できるため、バグの早期発見に役立ちます。

まとめ

整数型へ小数リテラルを代入すると小数部が切り捨てられ、期待とは異なる値が保存される場合があります。型に応じた値を代入するか、明示的なキャストや初期化子リストを用いることで変換ミスを防ぐことが可能です。本記事で示した例を参考に、変数宣言時には適切なデータ型と代入方法を検討してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次