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!