スコット・マイヤーズ : Effective C++ C++ 50 の急所 |
作成日: 2010-03-21 最終更新日: |
C++ を一通り学んだ人に対して、最も有効な助言が書いてある。これは初版である。
割合守りやすいものから、これは厳しいというものまで一通りそろっている。 例によって、訳者ならぬ役者の岩谷さんが突っ込んだ注釈をつけているので、 それも含めて学べる。
#define を使うマクロより、inline 関数を使うべきというのはその通りである。
また、malloc() と free() を使うより、new と delete を使うべき、というのも当然だ。
たとえば、項目 32 では、著者は次のように主張している。
クラス内の整数定数の代わりに enum を用いる
このようにする理由は、<クラス宣言の中で定数宣言を隠蔽したいが、 現行の C++ ではそれができない。そこでやむを得ず代わりに列挙型の enum を使う> ためである。 つまり、
class X{
static const BUFSIZE = 100; // エラー
char buffer[BUFSIZE];
};
はエラーである。 次も同様のエラー
class X{
static const BUFSIZE;
char buffer[BUFSIZE]; // エラー
};
const X::BUFSIZE = 100;
なのでやむを得ず
class X{
enum {BUFSIZE = 100}; // OK
char buffer[BUFSIZE];
};
とすればよい、とする。
ここで訳者の岩谷さんがかみついて、
〔必要となるクラス内定数が int ばかりであるとは限らないから、この enum を使う方法はペケ!〕
と言い切っている。
現在ではMINGWで 最初の書き方で通ることを確認した。 ただし、#include <stdlib.h> を#include している状態で BUFSIZE を BUFSIZ にしたとたん、 error: expected unqualified-id before numeric constant となる。これは、stdlib.h に BUFSIZ が固定値で登録されているからである。
書 名 | Effective C++ C++ 50 の急所 |
著 者 | スコット・マイヤーズ |
訳 者 | 岩谷 宏 |
発行日 | |
発行元 | ソフトバンク |
定 価 | 円(本体) |
サイズ | ??版 |
ISBN | ??? |
その他 | ?? |
まりんきょ学問所 > 読んだ本の記録 > スコット・マイヤーズ : Effective C++ C++ 50 の急所