C++を知りたい(4) キャスト

やさしい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

ちょっとキャストは背伸びしすぎた感があった。今のところは、こうゆうキャストがあるということを頭の片隅に置いときます。

コメントする

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


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください