Arantium Maestum

プログラミング、囲碁、読書の話題

Effective C++勉強メモ: Item 1 C++を複数の言語の集まりとして認識しよう

最近本当に「俺はC++を雰囲気で使っている」と実感しているので、Scot MeyersあたりからはじめてHerb SutterやAndrei Alexandrescuの著作などをいろいろ読んでいきたい。ということで備忘録的にメモ。

まず手始めにEffective C++。数章に分かれて、全部で55項目の「文法をある程度理解したプログラマが知るべきC++ベストプラクティス」を紹介している。

ちなみにこの本がカバーしているのはC++03まで(確か)。C++11以降のモダンなC++特有のベストプラクティスはシリーズ4作目のEffective Modern C++に載っているのだが、Effective C++のアップデート版ではなく、追加ティップス集といった趣なので、とりあえずシリーズ一作目から読んでいく。

第1章は導入らしくAccustoming Yourself to C++

第1項目は「C++を複数の言語の集まりとして認識しよう」というもの。

C言語オブジェクト指向言語、テンプレート・ジェネリクス指向言語、そしてSTLの四つの大きく作法の違うサブ言語によって形成されていることを認識し、C++で問題解決する場合これらサブ言語の間で作法を変えながらコードを記述していくことを心がけるべき、という主張。

STLがサブ言語として挙げられているのが少し意外な気もするが、実際使ってみるとかなり癖のある仕様になっているので納得である。

C++ならではの統一されたコードの書き方」を探そうとするとあまりにもケースバイケースで統一性がないように感じるかもしれないが、その四種類の言語がそれぞれ独特の作法を持っていると考えればまだ理解しやすい、らしい。

ここら辺は個人的な実感とも合致する。少なくともC的な部分とオブジェクト指向ジェネリクスでは考え方・書き方がかなり違って当然だと思う。「四つのサブ言語の集まり」というのが言語として望ましい形態なのかどうかは疑問が残るが、少なくとも現状をMeyersのいうとおり認識しておくのは建設的だろう。