ikautak.log

C/C++, Python, CUDA, Android, Linux kernel, Network, etc.

More Effective C++ 項目2 C++スタイルのキャストを愛用する

新訂版 More Effective C++ (AddisonーWesley professional co)

新訂版 More Effective C++ (AddisonーWesley professional co)

  • 作者: スコット・メイヤーズ,安村通晃,伊賀聡一郎,飯田朱美,永田周一
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2007/06/29
  • メディア: 単行本(ソフトカバー)
  • 購入: 8人 クリック: 129回
  • この商品を含むブログ (43件) を見る

項目2 C++スタイルのキャストを愛用する

static_castはCの汎用キャストとほぼ同じ。

const_castはconstとvolatileを変更する。
constしか受け付けないライブラリと、constでない型を使うライブラリを併用したときによく使ったような^^;

dynamic_castは継承関係の階層を下、または横にキャストする。
キャストに失敗するとnullポインタになるので、キャストがうまくいったかどうかを知ることができる。

reinterpret_castはポインタの型変換など、処理系依存となりそうなものに使う。
本だと関数ポインタをキャストする例が載っているが、組み込み出身の自分としてはメモリのあるアドレスを無理やり構造体ポインタでキャストするためによく使っていた。

Something* ps = reinterpret_cast<Something*>(0x80000000);

どの本にもとても危険なキャストで使うべきではないと書いてあるが、IPCを経由したときとかにvoid*で渡されるペイロードを構造体でキャストしたりと使えるシーンはあると思う。
その場合、構造体のメンバのバウンダリ・パディングに気を付ける必要があるけど。