スコット・マイヤーズ : 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 の急所


MARUYAMA Satosi