ぼく用あれこれまとめ

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演算子を使うよ。

関連リンク

記事メニュー
目安箱バナー