もはやメモリが少なくとも8Gは
必要な時代が来ているのかもしれません。
起動しただけで2G以上使っており、
何か作業をしようとプログラムを起動するにも
あまりにモッサリした動きになるので
システムのパフォーマンスオプションをパフォーマンスを優先するにしてみました。
ただ4G程度では、まだ足りないというのか...
こういうのは、思い至った時は大抵高いのが嫌なところ。
今時期は安くてもこの程度か...
6K位まで落ちれば、買ってもいいと思うかもしれない。
さて、今回はキャストの話です。(^_^;)
// とあるスレッド関数
void *something_thread_func( void *arg ) {
// 引数をとある構造体にキャスト
something_struct_t *pSomeStruct = (something_struct_t *)arg;
:
:
C++ では、このようなキャストを行ってもエラーにはなりませんが、
できるだけ C++ で追加したキャスト演算子を使うようにしたいものです。(^_^)
これらのキャスト演算子は、ポインタ型や参照型を、別の型に変換します。
※ここでは、 V という型を T型に変換することを意味しています。
const_cast<T>(V) const を取り除くのに使います。
dynamic_cast<T>(V) 基底クラスのポインタ(あるいは参照)を派生クラスの
ポインタ(あるいは参照)に変換するのに使います。
static_cast<T>(V) C のキャストに近い使い方ができます。
const は取り除くことはできません。
reinterpret_cast<T>(V) 関数ポインタを別の関数のポインタへ変換したり
ポインタをint型などへ変換するときに使います。
全く違う型へキャストした場合は不正アクセスを
引き起こしやすいため、注意が必要です。
どうしても必要なときだけ使うようにした方が良いでしょう。
そして、先程の例をキャストすると、こうなります。(^_^;)
// とあるスレッド関数2回目
void *something_thread_func( void *arg ) {
// 引数をとある構造体にキャストした2回目
something_struct_t *pSomeStruct = static_cast<something_struct_t>(arg);
:
:
void *something_thread_func( void *arg ) {
// 引数をとある構造体にキャストした2回目
something_struct_t *pSomeStruct = static_cast<something_struct_t>(arg);
:
:
このように、C++ のキャスト演算子を使うと、間違ったキャストをした場合に
コンパイルエラーになります(´・ω・`)
そのため、C の書き方よりも安全なキャストとなります。
また、_cast が付いているので、キャストした場所がわかりやすくなります。
grep で探すときも便利ですね(^_^)
今日の名言
もし「時」がこの世で最も貴重なものだとすれば、時の浪費ほど大きな浪費は
あるまい。失われた時は二度と帰らないからだ。時はいくらあっても十分では
ないのが常だから、やるべきことはさっさと行おう。価値あることを行おう。
精を出してことに当たれば、これまでよりてきぱきとやれるはずだ。
ベンジャミン・フランクリン
私は明日を恐れない。なぜなら私は、昨日を知ったし今日を愛しているからだ。
ウィリアム・アレン・ホワイト
君の毎分毎分を大切にすることをおすすめする。時間のほうは時間が自分で
世話をするだろうから。
チェスターフィールド卿
一度に一歩ずつ登れば、高い山でも踏破できる。
ジョン・ワナメーカー