C++ Module 06: インタラクティブ・キャスト学習

C++の多様な型変換(キャスト)を、対話的に探求します。

Exercise 00: Conversion of scalar types (スカラ型の変換)

この演習では、文字列として与えられたリテラルを`char`, `int`, `float`, `double`の4つの基本的なスカラ型に変換します。変換不可能な場合や特殊な値(`nan`, `inf`)の扱いも学びます。`static_cast`が中心的な役割を果たします。

インタラクティブ・デモ

下の入力欄にC++のリテラル(例: `42`, `-3.14`, `'c'`, `nanf`)を入力し、「変換」ボタンを押してください。

変換結果

char: -

int: -

float: -

double: -

Exercise 01: Serialization (シリアライズ)

データ構造体へのポインタを、整数型 `uintptr_t` に変換(シリアライズ)し、その整数から元のポインタへ復元(デシリアライズ)します。このプロセスでは、強力で危険な `reinterpret_cast` を使用します。

インタラクティブ・フロー

1. 元のポインタ

Data* ptr = ?
reinterpret_cast<uintptr_t>

2. シリアライズ後

uintptr_t raw = ?

4. 検証

ptr == deserializedPtr?
reinterpret_cast<Data*>

3. デシリアライズ後

Data* deserializedPtr = ?

Exercise 02: Identify real type (実際の型を識別)

`typeinfo` を使わずに、基底クラスのポインタまたは参照が指すオブジェクトの「実際の型」を特定します。実行時型情報(RTTI)を利用する `dynamic_cast` が主役です。ポインタと参照で挙動が異なる点に注目してください。

インタラクティブ・型識別子

生成されたオブジェクト

?

ポインタで識別 (`dynamic_cast`)

参照で識別 (`dynamic_cast`)