目次
概要
C++ では、狭い型(int など)と広い型(double など)を同時に演算すると、コンパイラが自動的に狭い型を広い型へ昇格させる暗黙型変換を行います。本記事では直径を整数型で、円周率を倍精度浮動小数点型で保持し、暗黙型変換を介して円周を計算する最小構成のコードを示します。自動昇格のしくみと精度面の注意点を整理し、移植性を高めるための基本方針を解説いたします。
サンプルコード
// int と double を掛け合わせて円周を計算するサンプル
#include <iostream>
int main(int /*argc*/, char* /*argv*/[])
{
int diameterMm = 6; // 直径(整数型)
const double PI = 3.141592; // 円周率(倍精度定数)
std::cout << "直径が " << diameterMm << " センチの円の\n";
std::cout << "円周は " << diameterMm * PI << " センチです。\n";
return 0;
}
コード解説
行 | 説明 |
---|---|
2 | 標準入出力ライブラリを取り込むため #include <iostream> を記述します。 |
5 | main がプログラムの開始点です。未使用引数はコメントで警告を抑止します。 |
6 | int diameterMm = 6; により整数型変数を宣言し値 6 を格納します。 |
7 | const double PI = 3.141592; として倍精度定数を宣言し、変更不可とします。 |
9 | 直径を出力し、前提値を明示します。 |
10 | diameterMm * PI を評価する際、diameterMm が double へ昇格し、結果も double 型となります。 |
12 | return 0; は正常終了を示します。 |
応用
暗黙型変換は利便性が高いものの、逆方向(double から int など)へ代入すると小数部が切り捨てられます。精度を保つ必要がある場合は static_cast<int>
で明示的にキャストし、変換前後の値を確認すると安全です。また、複数の型が混在する複雑な式では、中間変数に適切な型を採用し、変換回数を抑制することで精度と可読性を両立できます。
まとめ
整数型と倍精度浮動小数点型を組み合わせた演算では、C++ が自動で整数を倍精度へ昇格させて計算を行います。暗黙型変換の特性を理解し、適切な型とキャストを選択することで、精度を維持しながら簡潔なコードを実装できます。今回の例を基に、型混在演算時の変換ルールと精度管理に留意して開発を進めてください。