C++型変換完全ガイド:暗黙・明示変換とキャスト技法
C++ 型変換
C++がデータ型変更をどう扱うか、自動変換から安全なキャスト技法まで、実践的なコード例で解説します。
C++では、ある型の値を別の型に変換できます——これを「型変換」と呼びます。変換のルールを理解すれば、より明確で安全なコードが書けます。
主に2つのカテゴリがあります:
- 暗黙的(自動)変換
- 明示的変換(型キャスト)
暗黙的型変換
コンパイラが互換性のある型へ自動的に値を拡張または縮小するのが暗黙的変換です。ソースコードにキャストが現れないため、裏で行われます。
実例 1: int → double
#include <iostream>
using namespace std;
int main() {
int num_int = 9;
double num_double = num_int; // 暗黙的変換
cout << "num_int = " << num_int << endl;
cout << "num_double = " << num_double << endl;
return 0;
}
出力
num_int = 9 num_double = 9
コンパイラが代入前に int を double に自動的に拡張しました。
実例 2: double → int(切り捨て)
#include <iostream>
using namespace std;
int main() {
double num_double = 9.99;
int num_int = num_double; // 暗黙的変換
cout << "num_int = " << num_int << endl;
cout << "num_double = " << num_double << endl;
return 0;
}
出力
num_int = 9 num_double = 9.99
int に小数部がないため、小数部分が切り捨てられます——これはナロイング変換の一例です。
ナロイング変換とデータ損失
大きい型を小さい型に代入すると、コンパイラはデータを切り捨てる可能性があります。範囲の不一致を可視化すれば、予期せぬバグを防げます。

明示的変換(型キャスト)
変換を制御したい場合は明示的キャストを使います。C++には同じ目的を達成する複数の構文があり、それぞれスタイルガイドラインがあります。
- Cスタイルキャスト記法
- 関数スタイルキャスト(旧C++スタイル)
- モダンC++キャスト:
static_cast,dynamic_cast,const_cast,reinterpret_cast
Cスタイル型キャスト
Cから受け継がれた伝統的な形式です:
(data_type)expression;
例:
#include <iostream>
using namespace std;
int main() {
int num_int = 26;
double num_double = (double)num_int; // Cスタイルキャスト
cout << "num_double = " << num_double << endl;
return 0;
}
関数スタイルキャスト
コンストラクタ呼び出しのように読める、より明示的な代替形式:
data_type(expression);
例:
#include <iostream>
using namespace std;
int main() {
int num_int = 26;
double num_double = double(num_int); // 関数スタイルキャスト
cout << "num_double = " << num_double << endl;
return 0;
}
Cスタイルと関数スタイルの両方
#include <iostream>
using namespace std;
int main() {
double num_double = 3.56;
cout << "num_double = " << num_double << endl;
int num_int1 = (int)num_double; // Cスタイル
int num_int2 = int(num_double); // 関数スタイル
cout << "num_int1 = " << num_int1 << endl;
cout << "num_int2 = " << num_int2 << endl;
return 0;
}
出力
num_double = 3.56 num_int1 = 3 num_int2 = 3
両キャストの結果は同一ですが、関数スタイルキャストはモダンC++で推奨されます。より明確で、エラーを招きにくいためです。
モダンC++キャスト演算子
古典的な形式に加え、C++には型安全性と意図を明確にする4つの専用キャスト演算子があります:
static_cast– 継承を尊重するコンパイル時変換dynamic_cast– 多態的階層での安全なダウンキャストconst_cast– const性の除去または追加reinterpret_cast– ビットパターンの低レベル再解釈
これらについては専用チュートリアルで詳しく解説します。
推奨チュートリアル:
- C++ string と int の相互変換
- C++ string と float/double の相互変換
C言語
- C#型変換完全ガイド:暗黙・明示的変換、Parse、Convertクラス
- C++データ型完全ガイド:基本型、修飾子、ベストプラクティス
- C++演算子完全ガイド:算術・代入・関係・論理・ビット演算子と実例
- C++コメント完全ガイド:読みやすく保守しやすいコードのためのベストプラクティス
- C++クラステンプレート完全ガイド:実践的なジェネリックプログラミング
- C++ char型をマスター:宣言、ASCII、変換テクニック
- C++プログラミング言語:概要と主要機能
- C++変数タイプ完全解説:メモリ、制限、操作
- C++定数とリテラル完全解説:型、構文、ベストプラクティス
- Python 型変換とキャスト: 包括的ガイド
- Pythonにおける数値、型変換、数学のマスター