[[ssacontents]]

* C++の「使ったら負け」シリーズ [#g3e2033e]

** 超初級編 [#hc2fe4e8]

*** 最低レベルの警告メッセージ・もしくは抑止機能 [#h9da5c8d]

ほとんどの環境で、ビルドオプションに「警告レベル」という設定があります。~
これは、何も考えずに最大レベルにするのが正解。~

最低レベル、もしくは警告なしの設定にしてはいけません。それは、丸裸で戦場に行くようなものです。


** 初級編 [#k7607769]

*** #defineによるマクロ定義 [#cc11c2a6]

言うまでもありませんが、#defineによるマクロは強力すぎて、バグの温床であり、デバッグを困難にする要因です。できるかぎり使わないに越したことはありません。~
正当な理由なく#defineマクロを使ってしまったら、あなたの「負け」です。

*** Cスタイルのキャスト [#c7e6cba6]


*** ヘッダファイルでの using namespace [#q77ebee3]

*** グローバル変数 (デバッグ用途以外で) [#c644374e]

*** マジックナンバー [#p736465d]



** 中級編 [#l62a72b5]

*** クラスのfriend宣言 [#j21f6f25]

フレンドを使うのは非常に限定的。ほとんどの場合は使う事で何らかのトレードオフがあると考えた方がよい。

- フレンドを有効に使う数少ない例

+ CRTPの親クラスからプライベードのコンストラクタにアクセスさせる。(シングルトン実装など)

  class Hoge : public ts::singleton_policy<Hoge> {
    friend struct ts::singleton_policy<Hoge>;
    Hoge();
  public:


*** クラスの前方宣言 [#a3a7a6a7]

*** void* [#o3c3208e]

*** NULLなどCライブラリ由来のマクロ定数 [#mf7b7b69]

*** union [#fecb152e]

*** #ifdef #if defined() 等による条件コンパイル [#ua869d4f]


** 上級編 [#gd26ddcb]

*** reinterpret_cast [#yc9cacf0]

*** ヌルポインタチェック [#h9f43832]

*** switch文 [#w3edaa12]

*** 生delete文 [#jbbe4243]

*** マネージャーという名前を含むクラス名 [#d496b109]

** 最上級編 [#v5f7b084]

*** virtual [#t6f78602]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS