ぼく用あれこれまとめ
コーディングルール
最終更新:
Bot(ページ名リンク)
-
view
コーディングルール
- プログラムを書いていくうえでのルールをまとめます.
- 絶対的なものではなくてあくまでこうしたほうがよさそう程度で.
- 言語は, C++03.
- C++11 を踏まえてコーディングできるようにします.
2012年コーディング規約
クラス内列挙型は、サフィックスに"Types"
class Light { enum LightTypes // or enum Types { PointLight, SpotLight, DirectionalLight }; };
- STL や boost だと頻繁にクラステンプレート内で"xxx_type" が使われている.
- メタプログラミングで使われる「型」と混同しないように"type" は避け, "Types" にする.
コンテナのbegin, end メソッドよりも, std::begin(), std::end() を使おう
見ればわかるようなコメントアウトはしちゃだめよ!
- 見ればわかるような「これはコンストラクタです」「int 型に代入」などといったコメントは書かない.
- また, 処理が複雑になるものは適宜、関数化・クラス化し、わかりやすい命名を付けるよう心がける.
- ただし, ドキュメンテーションコメントはちゃんと書く.
マジックナンバーは廃止
- 型を明示的にし, その定数が何を示すのかをわかりやすくする.
- コメントアウトよりも, const 定数, あるいはenum 列挙子を使う.
"#define"マクロ定数は避ける
- "const"を使おう!
- class 内であれば、enumハックが使えます.
- 最新のコンパイラであればstatic const な整数型もおっけー。
- 浮動小数点の場合, inline 関数で呼び出すといいかも.
- プリプロセッサメタプログラミングでしかできないことはプリプロセッサで。
グローバルスコープは使わない.
- 適切な名前空間に入れよう.
- 適切な名前空間内であればstatic な, あるいはextern な変数を作ってもかまわない.
アンダーバーから始まる変数名は使っちゃだめよ
- "_xxx"はC, "__xxx"はC++, の標準ライブラリ側で使われてるから使っちゃだめ.
- サフィックスにアンダーバーはアリ。
const 定数は型のあと、const 参照は型の前
int******************************* const pUnko; // const 定数 const int ****************************** refUnco; // const 参照 const Vector3 & GetPosition(); // const 参照を返す関数 Vector3 const POSITION (1.0f, 2.0f, 3.0f); // const 定数(位置[[ベクトル]]を表す定数)
- 重要なのは「どこにconstがかかってくるのか」を理解すること.
typedef はグローバルスコープでしちゃだめ。せめてpublicなクラススコープ内で!
スコープを意識してキャッシュのヒット率を高めろ!
以下は, 以前書いたコーディング規約です。
無駄なコメントはつけない。
- 口に出さなくても君の想いは伝わるから。
関数は少なめに。スコープ内で使う分だけ定義(さだよし)。
- 局所的じゃなきゃ嫌なの。
オブジェクトは出来る限りすべて初期化する。
int x; //だめ int x = 0; //おっけー
再利用性を考えるだけ無駄。各クラスは異なった目的のもとで作られたものであるから。
リリースする前に最低限の例外処理を書こう。どこに例外処理をいれれいいのかわからない場合は、まずリソースファイルをディレクトリからはずそう。プログラムを起動したとき変な動作起こしたら、例外処理を入れる場面だ
- 例外処理とか入れてないからリソースはずした瞬間死亡
ブラインドテストしたときに狙った通りにプレイしてくれるとは限らない。
子から親はもちろん、親から子へとstatic_cast するのはおっけー。ただ、不完全型へのキャストはできないから動的キャストにはdynamic_cast かreinterpret_cast を使う。親ポインタが子を指してない場合が有り得るときはdynamic_cast が無難。dynamic_cast であれば親が子を指していない場合、0を返すが、静的キャストは指そうが指さまいがお構いなく返してくるから時と場合を考えて使わないと…。
参考文献
- Effective C++ 第3版(著:スコット・メイヤーズ、訳:小林健一郎)