C++のキャスト徹底解説

CスタイルからモダンC++まで、インタラクティブに学ぶ型変換の世界

1. 問題提起:C言語スタイルのキャスト

⚠️

原則、使用禁止

C言語のキャスト `(type)value` は、意図が不明確で危険な変換を許してしまいます。コードの可読性と安全性を著しく低下させるため、現代のC++ではその使用を避けるべきです。

2. C++の解決策:意図を明確にする4つのキャスト

C++98では、役割を明確に分離した4つのキャスト演算子が導入されました。これにより、プログラマの意図がコード上で明確になり、安全性が向上します。

a. static_cast

静的(コンパイル時)に安全性が判断できる、論理的に意味のある変換に使います。

インタラクティブ・デモ:数値変換

double d = 3.14; int i = ?;

b. dynamic_cast

実行時に安全性をチェックしながら、ポリモーフィックなクラス階層でダウンキャスト(基底クラス→派生クラス)を行います。

インタラクティブ・デモ:型識別

Base* p = ?

c. reinterpret_cast

ビット列を、全く別の型として再解釈する、低レベルで危険な変換です。エンディアンの影響を直接受けます。

インタラクティブ・デモ:メモリの再解釈

int value = 0x12345678;

12
34
56
78

d. const_cast

変数の `const` 性を取り除くために使います。主に `const` 非対応の古いAPIとの連携が目的です。

インタラクティブ・デモ:`const`性の除去

void legacy_func(char* p);

const char* str = "text";

legacy_func( str ); // Compile Error!