C言語スタイルのキャスト (非推奨)
(type)value
という形式は、意図が不明確で危険なため、現代のC++では避けるべきです。
C++の型変換について、基本から応用までをインタラクティブに学びます。
C++の多様な「型変換(キャスト)」に焦点を当て、コンパイル時と実行時における型の扱い方と、それに伴う強力さ、そして危険性について学びます。このガイドでは、各演習で登場した概念を深掘りしていきます。
(type)value
という形式は、意図が不明確で危険なため、現代のC++では避けるべきです。
コンパイル時に安全性が判断できる、論理的な変換に使います。数値型間の変換などが典型例です。
スライダーを動かして、`double`から`int`への変換を試してみましょう。
double d = 3.14;
int i = static_cast<int>(d); // 結果: 3
実行時に安全性をチェックしながら、クラス階層のダウンキャストを行います。
Base* p = new DerivedA();
if (DerivedA* da = dynamic_cast<DerivedA*>(p)) { ... }
ビット列を全く別の型として再解釈する、低レベルで危険な変換です。
変数の`const`性を変更します。`const`非対応の古いAPIとの連携などで限定的に使用されます。
`reinterpret_cast`はメモリ上の生のバイト列を扱うため、エンディアン(バイト順)の影響を直接受けます。
int value = 0x12345678;
を `char*` で解釈した場合の先頭バイトを見てみましょう。
先頭バイト: 0x12
先頭バイト: 0x78
`reinterpret_cast`は危険ですが、低レベルな操作には不可欠です。ここではその具体的な利用シナリオをいくつか紹介します。
確保した生のメモリ領域(`char*`)を、特定のオブジェクトの配置場所として解釈し直すために使用します。
特定の物理メモリアドレス(数値)を、ハードウェアレジスタを操作するためのポインタに変換します。
ネットワークで受信したバイトストリームを、特定のプロトコルヘッダ構造体として解釈するために使用します。
プログラマが自前で確保したメモリ領域に、オブジェクトの生成と破棄を直接コントロールするテクニックです。