ぼく用あれこれまとめ
static_cast演算子
最終更新:
bokuyo
-
view
static_cast演算子(性的なキャスト…/////)
キャストしてる?
- castって?…型変換しちゃうこと。コンパイラに怒られちゃうからしようね。
- でも、なるべくならcastが起こらないような綺麗な設計を心掛けようね。
- 起きちゃったものは仕方ないから、C++らしいキャストをしよう。
Cライクなキャストをした場合どうなるの?
- static_cast, const_cast, reinterpret_castのどれかに読み変えられます。
- static_castのつもりが、reinterpret_castになることも十分ありえる。
- また、基底classから派生classへのポインタにCライクなcastをすると、VC++環境ではレベル1の警告として扱われる。
- 派生classへのcastに失敗すると、ランタイム例外を起こす。
バインディング
- 型を確定させることをバインディングというらしい。
- C++ではコンパイル時とランタイム時に型確定することができる。
- dynamic_castはランタイム時の型確定だから、動的バインディングに含まれる。
- static_castはコンパイル時の型確定だから、性的バインディングに含まれる…////
static_cast演算子って?
int renton; float eureka = 1.56f; renton = (int)eureka; //いつものcast renton = static_cast<int>(eureka); //これがC++らしいstatic_castだぜ☆
- やってることは今までのCライクなcastと同じよん。
- 書き方が面倒になったけれど…。
- プラスに考えればいかにもcastしてる感を出すことによって、castしないでいいような設計を心掛けさせようとしてるのかもね。
- なんでstatic?性的なの?
- コンパイル時に行われるから性的なcastっていう意味らしいよ。
- 実行時に行うことができるcastを「dynamic_cast」っていうらしいよ。
- ただし、dynamic_cast演算子はちょっと特殊よ。
int* renton; float* eureka = NULL; renton = (int*)eureka; //いつものcast renton = static_cast<int*>(eureka); //これコンパイルエラーしちゃうよん
- ポインタ型への変換は残念ながらできないよ。
- もちろん従来のcastみたく整数型からポインタ型へなんてのもできないよ。
- ポインタ型からポインタ型への変換は、reinterpret_cast演算子を使うよ。