C++を知りたい(4) キャスト
2009/07/16
やさしいC++には、Cのキャストしか出てこないようです。(パラパラめくった感じ) そこで、C++ の4つのキャストを使いこなすを参考にしました。
dynamic_cast
dynamic_cast は、実行時に型を判別して安全にダウンキャストするためのキャスト演算子です。
C++ の4つのキャストを使いこなす
継承関係にあるクラス間のキャストということなのか。C++のOOPはまだ調べてないので試すのは後日にしよう。
static_cast は float から int への変換などのビットの変換が必要なキャストや、アップキャスト、型のテストを行わない場合のダウンキャストなどに用います。
C++ の4つのキャストを使いこなす
static_cast
#include <iostream> using namespace std; int main() { int i = 1; int j = 2; float ans; cout << 1.0 / 2.0 << endl; ans = i / j; cout << ans << endl; ans = static_cast<float>(i) / static_cast<float>(j); cout << ans << endl; }
$ g++ cast.cc $ ./a.out 0.5 0 0.5
reinterpret_cast
reinterpret_cast はコンパイラに型の解釈を指示するだけで、実行時にはデータをなにも変換しないような場合に使います。
C++ の4つのキャストを使いこなす
これも試してみる程C++を知らないので後日。
const_cast
const_cast は const を取り除くのに使います。
C++ の4つのキャストを使いこなす
const_castなのにconstを取り除くのに使うのか。
#include <iostream> using namespace std; int main() { const char* s = "test\n"; char* x = const_cast<char*>(s); x = "aa\n"; cout << x << endl; }
$ g++ cast.cc $ ./a.out aa
ちょっとキャストは背伸びしすぎた感があった。今のところは、こうゆうキャストがあるということを頭の片隅に置いときます。