cocos2dxicon

【c++】決定版!*_castまとめ

LINEで送る
Pocket

c++は主に4つのキャスト演算子を持ちます。


const_cast:constと宣言されたものに書き込めるようにする。

static_cast:的確に定義された暗黙の変換の逆の変換を行う。
reinterpret_cast:ビットパターンの意味を変えてしまう。
dynamic_cast:動的なクラス階層の移動をチェックする。

プログラミング言語C++第4版より

さて、理解出来たでしょうか?
理解出来た人は見なくても良いかもしれないです笑

それぞれのcastがどういう動作をするのか検証してみました。


まず、2つのカスタムクラスを作成します。
BaseHogeとSubHogeです。
その名の通りSubHogeはBaseHogeを継承しています。
そして4つの変数を用意しました。
一番下はポリモーフィズムのために用意しています。


そして以下のコードがテストコードです。


さて、お気付きの人もいると思いますが、一部はコンパイルすら通らないものもあります。

少し考えてから先に進むとより面白いかもしれません。


答え合わせ


さて、ではまずコンパイルの通らないものを紹介していきます。


マークしたキャストがコンパイル通らなかったものです。
どのくらい正解していましたか?

それでは通ったもの達の結果を見ていきましょう。


面白い所で言うと以下ですかね。

・integerからのreinterpret_castのコンパイルが全て通っている
・逆にオブジェクトからintegerへのコンパイルは全て通らない
・static_castのbase自身へのcastが呼び出したクラスのポインタになる
・constは自分自身のポインタ以外はエラーになる(用途的に当たり前ですね)

※ちなみに reinterpret_castのポインタへのキャストはintegerの値を16進数にした値でした。
なので、integerが10なら0xaだし、15だったら0xfと言った具合ですね。

他にこういう実験してくれとかあれば@daiki1003までどうぞ!

誰かのお役に立てば。

このブログのcocos記事一覧

LINEで送る
Pocket

Dalt

translimit, Inc. Application Engineer. Twitter: @daiki1003 Facebok: Daiki Asahi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です