- 追加された行はこの色です。
- 削除された行はこの色です。
[[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]