C++プログラマであるかを見分ける10の質問の解答例

C++プログラマであるかを見分ける10の質問 http://d.hatena.ne.jp/tt_clown/20110307/1299478662 に対するTwitter上での解答例を纏めたものです. 新たな解答例を発見したら追加してみて下さい.
3
USAGI.NETWORK: Dr.USAGI // Vstreamer on Twitch @usagi_network

1.トポロジに応じて列挙ります/2.コンパイラに対し型の意味論を強制します/3.引値による自動解決、派生からの仮想基底呼び、派生の知らんでいい事は教えない/4.変数ないしメンバの不変明示/5.複数の既定型を合体できます/6.ヒープはスマポ/7.複製とかむーぶとかconstとか作る

2011-03-07 15:59:40
USAGI.NETWORK: Dr.USAGI // Vstreamer on Twitch @usagi_network

8.virtualってないとRAIIで基底のデストラクタ呼ばれず期待外れリークあぼん注意/9.なんかepiさんがブログに書いてたの読めばまとまってていいと思います。よほど複雑な事してなきゃ必要に応じて飛ばせばいいんじゃない/10.実行時評価が要らなきゃテンプレートでいいんじゃない

2011-03-07 16:04:01
隅須正昭 @nagoya313

一番が地味にムズい。何というかうまく表現できない。

2011-03-07 22:23:31
隅須正昭 @nagoya313

2番はstatic_castが・・・あれ、どう説明すればいいんだろ。暗黙変換可なのとvoid*から他ポインタへの変換と一応継承関係にあるクラスのポインタが変換出来るとかか?

2011-03-07 22:26:27
隅須正昭 @nagoya313

const_castはcvのつけはずしのみ。

2011-03-07 22:27:17
隅須正昭 @nagoya313

reinterpret_castは処理系依存なキャスト?

2011-03-07 22:28:16
隅須正昭 @nagoya313

dynamic_castが安全なダウンキャストかね

2011-03-07 22:28:40
隅須正昭 @nagoya313

Cスタイルキャストはstatic兼const兼reinterpret_castで絶対に使ってはいけない物。最後の部分大事。

2011-03-07 22:29:36
隅須正昭 @nagoya313

3番。overloadは引数が違う同名関数、overrideは仮想関数の派生クラスでの再定義、 hidingはオーバーライドすると基底クラスのオーバーロードが隠れるとかのことかね

2011-03-07 22:32:43
隅須正昭 @nagoya313

というか3番のhidingは単純に派生クラスで同じ名前の定義したら名前隠すってことでいいのか。無理にオーバーロードとオーバーライドに絡めすぎた。

2011-03-07 22:39:46
隅須正昭 @nagoya313

4番。変数に付けると書き換え不可に。メンバ関数に付けるとmutableメンバ変数以外の書き換え不可。

2011-03-07 22:36:15
隅須正昭 @nagoya313

5版struct derived : base1, base2 {};みたいな奴ってだけだとさすがに怒られそう。

2011-03-07 22:41:19
隅須正昭 @nagoya313

段々適当になってきたけど6番。リソース管理は取り敢えずスマポ使う。無効値使いたい場合はoptionalの使用を検討。生ポを使うのはnullがありえる単純な参照位でそれ以外は参照って感じ?

2011-03-07 22:53:27
隅須正昭 @nagoya313

7番。const教的には代入演算子は要らないかも。は置いといて、デフォルトじゃまずいときはdeleteするか、望む挙動になるように自分で書くとかか。

2011-03-07 22:55:10
隅須正昭 @nagoya313

8、取り敢えず全部にvirtual付けようってスタイルは撲滅しよう。

2011-03-07 22:56:20
隅須正昭 @nagoya313

9、コンストラクタで例外投げるときはデストラクタの扱いに注意して、デストラクタでは絶対に投げない。

2011-03-07 22:57:16
隅須正昭 @nagoya313

10、使い分けか。よく分からんが双方のメリットをあげると前者は実装を隠蔽できてそこからの依存関係解消からのコンパイル速度向上、後者は静的解決だから実行時に速いとかかなぁ。

2011-03-07 22:59:45
H.Torii @torii_h

A.1 表向きはアルゴリズムと共に使うため。実は作者が自慢するため。 RT @disktnk RT @super_rti: C++プログラマであるかを見分ける10の質問 - http://htn.to/uNHztd

2011-03-07 23:10:18
H.Torii @torii_h

A.2 Cスタイルの置換は大変。reinterpret_castかstatic_castかコンパイラにより挙動が違う。悩むな禿げるぞ。 RT @disktnk RT @super_rti: C++プログラマであるかを見分ける10の質問 - http://htn.to/uNHztd

2011-03-07 23:13:14
H.Torii @torii_h

A.3 君に良心があらばoverloadするな。罪深きoverride。hiding地獄。editor救世主に救われたければ。福音を。 RT @disktnk RT @super_rti: C++プログラマであるかを見分ける10の質問 - http://htn.to/uNHztd

2011-03-07 23:15:34
H.Torii @torii_h

A.4 constは感染する。それは大変有名である。病状が進行するとconst_cast病に罹る。深刻である。 RT @disktnk RT @super_rti: C++プログラマであるかを見分ける10の質問 - http://htn.to/uNHztd

2011-03-07 23:17:31
H.Torii @torii_h

A.5 多重継承は共産主義である。若いうちに熱狂しなければ愚か。プロになって熱狂してれば真性バカ。そしてvirtual public。 RT @disktnk RT @super_rti: C++プログラマであるかを見分ける10の質問 - http://htn.to/uNHztd

2011-03-07 23:19:53
H.Torii @torii_h

A.6 創世記unique_ptrがあれば良かった。手遅れである。リファレンスカウンタに災いあれ。マルチスレッド地獄に落ちよ。 RT @disktnk RT @super_rti: C++プログラマであるかを見分ける10の質問 - http://htn.to/uNHztd

2011-03-07 23:22:11
H.Torii @torii_h

A.7 腱鞘炎悪化に備えよ。汝のプログラマ人生を縮めるもの。それは実体なきprivateな代入演算子とコピーコンストラクタである。 RT @disktnk RT @super_rti: C++プログラマであるかを見分ける10の質問 - http://htn.to/uNHztd

2011-03-07 23:24:29
H.Torii @torii_h

A.8 virtualデストラクタ?マイヤーズを嫁。おっと忘れてた第3版を買え。神にも誤りはある。 RT @disktnk RT @super_rti: C++プログラマであるかを見分ける10の質問 - http://htn.to/uNHztd

2011-03-07 23:26:05