タグ

ブックマーク / ray.sakura.ne.jp (5)

  • C++の4つのキャストを使いこなす

    イントロダクション C++ には全部で4種類のキャストがあります。これらの使い方をしっかり確認しておこうというのが今回の主旨です。いきなり題に入ってもいいのですが、まずは C 言語のキャストをおさらいしてみましょう。 (type-name) cast-expression C のキャストにはこの1つの形式しかありません。ややこしいですね。1つしかないのに何がややこしいかって?見た目は1つの形式しかないのに実際の動作は何通りもあるのがややこしいんです。ざっと考えただけでも次の3つの使い方が思い浮かびました。 float average(const int* array, int size); int n = (int) average(array, size); void * get_data(int nID); char * p = (char *) get_data(2); int g

    agw
    agw 2011/10/01
    大変良質なエントリ。
  • 何でもかんでも virtual にしてはいけない

    イントロダクション 派生される可能性があるクラスではデストラクタを virtual にすることは C++ の基事項としていいでしょう。しかし、その知識を持ってはいるけどいまいち virtual を理解していなくて、何でもかんでも virtual にしてしまう、というのではいけません。そういう人のために、ここでは virtual を使ってはいけない場合について書きます。 何のために virtual があるのか さて、メンバ関数を virtual 宣言すると、そのクラスに対し vtable と呼ばれるテーブルが作られ、隠しメンバとして vtable へのポインタが追加されます。vtable は virtual 宣言されている関数のアドレスを集めたテーブルであり、vtable へのポインタは 32bit 環境なら大抵 4 byte になります。つまり、クラスの中に virtual 宣言されたメ

  • delete と delete []

    イントロダクション C++ のメモリ解放演算子には delete と delete [] の2つがあります。まず、「そんなこと初めて聞いたよ」という人のためにこの2つの違いを簡単に説明します。分かってる人は次の段落は読み飛ばして下さい。 簡単に言うと、delete は new で確保したものを削除するためのもので、delete [] は new [] (配列の割り当て)で確保したものを削除する為のものです。だから、配列を削除する時は delete [] を使わなくてはなりません。配列に delete をかけても最初の要素しか削除されず(デストラクタも呼ばれず)、リソースリークが起こってしまいます。 何故こんなめんどいことになってるのか では、何故 delete と delete [] の2つを使い分けなくてはならないのでしょうか。配列に delete をかけたら自動的に内部で delete

  • template

    演習で使った C++ のテンプレートに関する資料を中途半端ですが公開しときます。暇があってやる気が出たら追加や書き直しをするかも。 テンプレート一般 template の適当な説明 コンパイル時の計算 コンパイル時のコード生成 traits とは policy とは typename は何故必要か

  • ゲーム木の探索問題

    ゲーム木の探索をする際に使われる様々な方法を紹介します。 基となる探索法 Depth first search と Breadth first search Iterative deepening Iterative broadening 探索における戦略 Minimax と Negamax 枝刈り法 αβ pruning Scout と NegaScout SSS* と DUAL* (概要) MTD(f) やその他の MTD (概要) その他の手法 Null window search

  • 1