読者です 読者をやめる 読者になる 読者になる

好き勝手に・げーあにん?

ファミコンと同い年の社会人ヌルオタの日記

『ゲームプログラマのためのC++』を大体読んだ

プログラム

ゲームプログラマのためのC++

ゲームプログラマのためのC++

中盤以降、かなり流し読みですが、一応、感想などを。

章ごとのタイトルとかいちいち書かないけど、Amazonのページ見れば載ってるからいいですよね。


本の序章の『本書の対象読者』というところに

本書を最大限に活用するためには、数年間のC++の経験か、プロジェクトを1つ完了するぐらいの経験があったほうがよいでしょう。

と書いてあるように、決して初心者向けではないです。かと行って、書いてある通り、プロジェクトを1つ完了した後だと、ちょっと手遅れな内容も含まれてますよね(苦笑)。個人的には1〜10章までと、18,19章はプロジェクトが1つ終わる前に知っていて欲しいかなーと。

Effective C++ と Effective STL を読んでいる人なら、かなり読む部分は少ない感はある。

良いところ

この手の情報は、何冊も本や資料を読まないといけない情報だったりするので、それが1冊にまとまっているのはとても良いことだと思います。まぁ、深くは書いてないので、結局は参考書籍として紹介されている本を読むハメになったりはするかもしれませんが、それはまた別の話ということで。

あとは、ゲームプログラマでなぜか(?)嫌いな人が多い STL にかなりのページ数を割いて、使わない理由が無いことを示しているのも良いですよね。

読む順番

素直に最初から読んでもいいですが、個人的には最後の方にある『18章 大きなプロジェクトの注意点』『19章 クラッシュに耐えるゲームの作成』をもうちょっと先に読んだほうがいいかなぁと。この辺りは、常時気にしていて欲しい部分なので。

読了する気なら最初から最後まで読めばいいですが、途中で読むを挫けそうになったら、18章、19章に飛ぶことをお勧めしておきます。

ちょっと疑問におもったところ

演算子オーバーロードの定義が変のような気がするのは私だけ?

55ページ

const Matrix4x4 &Matrix4x4::operator*(const Matrix4x4 &matrix);

二項演算子なのに謎の参照が返ってきてたり、

129ページ

const Vector3d operator+(const Vector3d &v1, const Vector3d &v2)
{
    return Vector3d(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z);
}

実体が返ってくるのになぜかconstがついてたりで、ちょっと謎。後者は特に実害ないけども。前者は operator+ じゃなくて、 operator+= の脱字なのかなぁ……。脱字だとしてもここにconstいるか?

序盤の章の const の扱いが全体的に怪しいような気もして、ちょっと不安を覚えたりもした。

constといえば

P.46

パラメータが値で関数に渡されている場合、constを使う必要はまったくありません。すでにデータのコピーを渡しているので、関数が内部的な演算のためにデータを書き換えるのであれば、それを止める意味はありません。

これを見て、「いやいや、この場合でも const を付けるべきだろう」と思ったら、const 教への第一歩ですね。

メモリ関連はページ数をかなり割いていて良い。……だけども

自作のメモリプールクラスを作った次のセクション

P.169

現在、メモリプールクラスにはたくさんの機能がありますが、まだ特に便利というわけではありません。生のメモリを割り当てるだけで、このクラスを通じてオブジェクトを割り当てることすらできません。

え? placement new でできるよね? と思ったんだけど、そういう事じゃないんだろうか。

ちなみに、本の方ではこの後、各 class のクラス関数に operator new と delete を追加していく方法が紹介されています。……うーん。

例外処理

さらっと、const 無しの参照を catch で受けるコードが載っているんだけど、例外って何を投げるのがいいんだっけ……。

ちなみに、私は残念ながら、C++の例外処理は、可能な限りコンパイラオプションでOFFにしてしまう派です……C++の例外難しいです……。

おわり

中盤以降は、いろいろ好みの問題があると思うのでノーコメントでー。べ、別に、ちゃんと読んでないから書けないとか、そんなんじゃないんだからねっ。

目次を見て、気になる部分が多い人は買ってもいいんじゃないでしょうか。

特にまとめとか無く終わり。