C++ のキャスト

C++ には 4 つのキャストがあります。

名称 説明 使用
dynamic_cast 基本クラスから派生クラスへのキャスト使用するべきではない
const_cast const を外すキャスト使用するべきではない
static_cast double から int など暗黙の変換のあるキャスト 使用可
reinterpret_cast double * から long long などの無理やりキャスト なるべく使用しない

個人的には、 C++ のキャストは書くのがめんどくさいし、 static_cast 以外はあまり使うべきではないのに static_cast は C のキャストだしってことで、 C 形式のキャストでいいんじゃねって思っています。
ただし、コーディング規約で決まっている場合などがあって使わないといけない場合とかもあると思います。 そこで、使い方を考えてみます。

書き方

C 形式のキャストの場合は対象に括弧を付ける必要はないのですが、 C++ 形式の場合は必ず付ける必要があります。
ival = (int)dval;               /* C */
ival = static_cast<int>(dval);  // C++
C++ のキャストは形式としては言語の機能というよりも templete 関数の一種のような見た目になってます。めんどくさいのですが、 Boost の lexical_cast のようにキャストっぽい関数をつくって形式を合わせることができるという利点もあります。

コードの見え方とコードの質

C に比べ、 C++ のキャストでは確かに書くのがめんどくさいなりましたが、あまりやるべきではないことはめんどくさくするのがいいという考え方もあります。

例えば Ruby ではグローバル変数やクラス変数には必ず $, @@ を付ける必要があります。こういったものは沢山使っているとコードが汚く見えます。 グローバル変数などを大量に使うことはコードの質としてもダメです。
コードの質の悪いものは汚く見えるので、綺麗に見えるようにコードを書きます。 そうすれば、自動的にコードの質も上がってきます。

C++ でのキャストの使用

C++ のキャストも、 C++ の型安全性を無理やり壊すので、よくないものだと言われています。(『 Effective C++ 』)
めんどくさいものは使いたがらなくなりますし、 C++ のキャストの汚さやめんどくささはいいことかも知れません。
もちろん、 めんどくさいから C 形式のキャストを使うということになるとだめなので、コーディング規約などで使用を強制しておく必要があります。

最初に言っていたことと違うことになってますが、一概にキャストはダメという訳ではないので、次回からこのキャストについて詳しく考えていきたいと思います。

Effective C++ 原著第 3 版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)Effective C++ 原著第 3 版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
(2006/04/29)
スコット・メイヤーズ

商品詳細を見る

Boost C++ Libraries プログラミングBoost C++ Libraries プログラミング
(2007/07)
稲葉 一浩

商品詳細を見る

オブジェクト指向スクリプト言語 Ruby (ASCII SOFTWARE SCIENCE Language)オブジェクト指向スクリプト言語 Ruby (ASCII SOFTWARE SCIENCE Language)
(1999/10)
まつもと ゆきひろ、石塚 圭樹 他

商品詳細を見る
関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
43位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
3位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

05月 | 2017年06月 | 07月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。