このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

生キャストを使ってしまうところ、望ましい方法

C++でのキャスト - 檜山正幸のキマイラ飼育記 メモ編にて:

Cの生のキャストは、構文が (DerivedConcrete *) だから、grepにひっからないのが困る。当然に安全性はないし。しかし、最近も「まーいいや」と使った気がする。イカイカン。

探してもみつからないけど、次のような状況だと使ってしまう。

バイナリファイルからバイト列をバッファに読み込む。そのバイト列が構造を持つとして、(struct Hoge *)pBuffer みたいにバイト列バッファ先頭へのポインタを構造体へのポインタとみなして、フィールドを取り出すとか。

「バイト列を構造体と見なす」はどこかでやる必要があるから、不明なデータ(無構造バイトデータ)を特定型だと見なす行為はどこかで発生する。「不明データ+キャスト」を極力減らして、“分かっているデータの分かっているフィールド(なりメソッド)へのアクセス”に早めに移行する、ってことだろう。

早いタイミングで「不明(型なし)データ→型付きデータ」という移行を済ませておけば、移行の後は型安全に処理できる(コンパイラの型検査が助けてくる)。