プログラミング言語C++第3版正誤表

 『プログラミング言語C++第3版』(アジソン・ウェスレイ・パブリッシャーズ・ジャパン, 1998年)の正誤表です。原著者にならい、「誤りと意味の明確化」、「入力ミス」に分類し、さらにそれらを原著の訂正と翻訳の訂正に分類します。原著の正誤表はこちらにあります。また、2000年に入ってからの新規追加分はこちらに日付順にまとめてあります。

 原著者は、「誤りと意味の明確化」の部分には理解を損ねる可能性があること、「入力ミス」には綴り、文法の誤りを入れるとしていますが、「誤りと意味の明確化」の部分は誤りよりも、意味を明確にすべきところの方が多く、また多くの読者には影響を与えないとしています。原著の正誤表(の翻訳)の部分では、このことを考慮に入れてください。翻訳では、当然誤りに分類されるものが多くなると思います。

 原著の正誤表のうち、「第7、8刷から第9刷へ」という部分までは、訳書に生かされています。そのため、原著の正誤表のなかでここに掲載するのは、第9刷以降に対するものだけになります

 原著同様、s/旧/新/という形式を使います。ただし、旧、新の部分に/が含まれる場合には、\/と表記することにします。\/は/と読み替えてください。また、\nはそこに改行が入ることを示します。

 等幅は、リスト内を表わします。原著、訳書ともリストはプロポーショナルの斜体となっていますが、Web上では、この形ではインデントが崩れてしまいますので、やむを得ず等幅を使っています。リストのコメントも同様に等幅を使っています。太字は本文中の太字部分、斜体は本文中の斜体部分を示します。


原著: 誤りと意味の明確化

第4章:

pg.109 (明確化)§4.5.1(原正誤表では§4.5となっているが、§4.5.1の誤りだと思われる)の最後の2行を次の内容に差し替え

float型の浮動小数点数リテラルが必要な場合には、サフィックスfまたはFを付ける。

3.14159265f    2.0f    2.997925F    2.9e-3f
long double型の浮動小数点数リテラルが必要な場合には、サフィックスlまたはLを付ける。
3.14159265L    2.0L    2.997925L    2.9e-3L
第11章:

pg.338 (明確化)§11.7.1の最初の段落を次の内容に差し替え

 デフォルトで、引数を1つ取るコンストラクタは、暗黙の変換も定義する。型によっては、これは理想的な形である。たとえば、complexintによって初期設定できる。

complex z = 2;  // zをcomplex(2)で初期設定する
しかし、暗黙の変換が望ましくなく、エラーを導く場合もある。たとえば、stringのサイズをintで初期設定できるようにしていたら、次のように書くプログラマがかならずいるだろう。
string s = 'a'; // sをint('a')個の要素を持つ文字列にする
人間がsの意味をこのように定義することはまず考えられない。

pg.340 s/const string&/string&/ 2回

pg.340 s/const_iterator/iterator/

第19章:

pg.648 g()の改良版

void g(vector< int>& vi)
{
    Checked_iter< vector< int> > p(vi,vi.begin());
    // ..
    int i = p.index();                                  // 現在の位置を取得
    vi.resize(100);                                     // pは無効になる
    p = Checked_iter< vector< int> >(vi,vi.begin()+i);  // 現在の位置を復元
}
第20章:

pg.682 s/range_error/out_of_range/

pg.684 s/range_error/out_of_range/

pg.689 s/range_check/length_error/

第21章:

pg.723 s/s.setprecision(n)/s.precision(n)/

pg.735 s/charT,traits/Ch,Tr/ 2回

第24章:

pg.863 s/> print_all(Iter_for_T/> void print_all(Iter_for_T/

第25章:

pg.879 s/virtual add_fuel/virtual void add_fuel/

pg.880 s/virtual dispatch_to/virtual void dispatch_to/

翻訳: 誤りと意味の明確化

目次:

pg.6 s/2.5.3 具象/2.5.3 具象型/

第1章:

pg.34 s/終端子/非終端記号/

pg.34 s/指数的/指数関数的/

pg.35 s/静的な型チェック/強い静的型チェック/

pg.35 s/肝に銘ずる必要がある。/肝に銘ずる必要がある。同じことが初期の表現力の低いC++の経験を持つプログラマにも当てはまる/

pg.39 s/C++を開発し/C++を着想し/

第2章:

pg.53 s/メカニズムを機能する/メカニズムを提供する/

pg.60 s/class Overflow()/class Overflow { }/

pg.60 s/実装者は、必要に応じて/実装は、必要に応じて/

pg.63 s/より妥当な抽象型の定義のためには、数学的な“抽象”規定が必要だろう/より妥当な抽象データ型の定義のためには、“抽象”の数学的な規定が必要だろう/

pg.64 s/constructorと呼ぶ。/constructorと呼ぶ。コンストラクタはそのクラスのオブジェクトを初期設定するための方法を定義する。/

pg.65 s/2.5.3 具象/2.5.3 具象型/

pg.68 s/public Stack/public Stack {/

第3章:

pg.78 s/サンプルを示す。/サンプルを示す。当然ながら、プログラマとしては、ほとんどのシステムが提供している拡張ライブラリも検討すべきところだが、それは練習問題としておくことにする。/

pg.80 s/役に立つさまざまな文字列操作機能/結合などの役に立つさまざまな文字列操作機能/

pg.89 s/要素を返すsize()メンバ/要素数を返すsize()メンバ/

pg.91 s/count(count/count(const/

pg.95 s/ofstream_iterator<string> oo/ostream_iterator<string> oo/

pg.100 s/無駄な繰り返しを避けよ/作業の無駄な繰り返しを避けよ/

第4章:

pg.103 s/xyfが適切に/xyfという名前が適切に/

pg.104 s/別の章で示す。/別の章で示す。本章では、単純にC++プログラムを構築するためのもっとも基本的な素材を提供するだけである。/

pg.107 s/wchar_tという型を提供している。/wchar_tという型を提供している。これは独立の型である。/

pg.108 s/2つの補い合う16ビット整数でintを表現するマシンでは/16ビットの2の補数でintを表現するマシンでは/

pg.119 s/静的であるかどうかに関わらず、デフォルトで初期化される/静的であるかどうかによって、デフォルトで初期化されるかどうかが決まる/

第5章:

pg.133 s/的確に定義された/的確なコメントを付けた/

pg.134 s/iiをインクリメント/iiはインクリメントされて1に/

pg.136 s/これのもっとも面白い使い方/繰り返しになるが、これのもっとも面白い使い方/

pg.137 s/選択演算子(§11.8)を多重定義した/添字演算子を多重定義(§11.8)した/

pg.138 s/.の後ろ/}の後ろ/

pg.139 s/ならないC++/ならない、C++/

pg.142 s/それらを1つずつ/それぞれを/(練習問題1)

pg.142 s/string"のサイズ/string"の長さ/(練習問題5)

第6章:

pg.148 s/論理演算子である。/ビット単位の論理演算子、<<>>はそれぞれ左シフト、右シフト演算子である。/

pg.148 s/prim()term()を/prim()expr()を/

pg.153 s/失敗/成功/

pg.154 s/形のよい/形の整った/

pg.160 s/論理和を代入/内包的論理和を代入/

pg.163 s/imaskのビット単位の論理積を取ってからその結果が0かどうかをテストするという意味にはならない/i&(mask==0)と解釈される/

pg.171 s/IO_device* = dl/IO_device* dl/

pg.171 s/新しい型の値を生成する。/新しい型の値を生成する。少なくとも、変換後の型がもとの値と同じビット数を持つ場合には、変換後の値に対してreinterpret_castをかけて元の型に復元し、使うことができる。/

pg.177 s/const変数/const/

pg.181 s/純粋なコメントについては\/\/スタイルのコメントだけを使い、/関数内では\/\/スタイルのコメントだけを使い、その/

pg.182 s/2つの文字列を比較するstrcpy()/2つの文字列を比較するstrcmp()/(練習問題10)

第7章:

pg.186 s/自分自身を再帰呼び出しするインライン関数、相互に再帰呼び出しするインライン関数、入力に依存しないインライン関数/相互に再帰呼び出しするインライン関数、入力によって再帰呼び出しするかどうかが決まるインライン関数/

pg.190 s/compute2(Vec& v)/compute2(const Vec& v)/(原著正誤表の見落とし)

pg.190 s/{ return }/{ return; }/ 2回

pg.197 s/単純な/単一の/

pg.201 s/いつもわかりやすいとは言えない宣言構文を避けるために/あまりわかりやすくない宣言構文をいつも使うのを避けるために/

pg.201 s/typdef/typedef/

pg.202 s/gap\/2/gap\/=2/

pg.205 s/C++の構文やC++の型、スコープの規則をほとんど認識しない/C++の構文についてはほとんど、C++の型、スコープの規則についてはまったく知識を持たない/

pg.205 s/\/*コメントを認識しない/\/\/コメントを認識しない/

pg.207 s/すべて大文字の/大文字を大量に含む/

pg.208 s/引数としてこのポインタを取る関数の定義を書き、戻り値として引数を返しなさい/このポインタを返す関数。また、引数としてこのようなポインタを取り、戻り値として引数の値を返す関数の定義を書きなさい/(練習問題1)

pg.208 s/長い文字列に対するポインタ/文字配列という形の任意の長さの単語へのポインタ/

第8章:

pg.212 「字句解析器の実装」から「記号表のインターフェイス」への矢印を除去(原著正誤表の見落とし)

pg.213 s/個々/個別/

pg.216 s/using-declarationを使えば/using-declarationを1度使えば/

pg.219

	using namespace Lexter; 	// Lexerのすべての名前を利用できるようにする
	using namespace Error;		// Errorのすべての名前を利用できるようにする
  の2行を
	using Lexer::get_token; 	// Lexerのget_tokenを使う
	using Lexer::curr_tok; 		// Lexerのcurr_tokを使う
	using Error::error; 		// Errorのerrorを使う
  の3行に置換

pg.220 s/そうしたい場合にはすることができる。/そうしたければそうすることもできたところである。インターフェイスの設計は、設計作業のなかでももっとも基礎的な作業の1つであり、大きな利益が得られるか失われるかを決する。そのため、本当は何をしようとしているのかを熟考し、さまざまな対案を議論する価値はある。\n ここで示した方法は、考えられるもののなかでもっとも単純なものだということ、そしてもっとも単純なものがもっとも優れたものになることが多いということを覚えておいていただきたい。/

pg.220 s/人間の頭脳やコンピュータがそのことに気付くためには時間がかかる/そのことに気付くためには、時間、思考力、計算などが必要である。/

pg.221 s/これで、Parser_interfaceのユーザーが依存するのはParser::expr()だけで、それも間接的なものであることがはっきりする。しかし、潜在/明らかに、Parser_interfaceのユーザーが依存するのはParser::expr()だけで、それも間接的なものである。しかし、/

pg.221 s/Parserの実装者用インターフェイスのうちParser_interfaceを定義したスコープで関係のある部分(以前、Parser'と呼んでいたもの)だけにParser_interfaceからParserへの依存関係を制限する/Parser_interfaceが定義されるスコープには、構文解析器の実装者インターフェイスのなかの関連箇所だけ(以前、Parser'と呼んでいたもの)が入るようにして、Perser_interfaceからParserへの依存関係を明示的に制限する。/

pg.221 s/この状態でも/ここでも/

pg.222 s/不必要に複雑になる/不必要に難しくなる/

pg.234 s/関数引数宣言と同じような形の/関数引数宣言と同じように使われる/

pg.236 s/ハンドラリストの構文は、caseリストの構文が異なるのは/ハンドラリストとcaseリストの構文が異なるのは/

pg.239 s/&input!=cin/input!=&cin/

pg.239 s/Driver名前空間に挿入すべき関数である/Driver名前空間のメンバ候補である/

pg.240 s/input != cin/input != &cin/

pg.241

	switch(argc) {
  の前に
	using namespace std;
	using namespace Driver;
  を追加

第9章:

pg.245 s/file2.cで使われている/file2.cg()で使われている/

pg.247 s/データ定義を格納するソースファイルの/データ定義を格納するソースファイルに、/

pg.247 s/コンパイラが置き換え後のファイルを読むので/置き換え後のファイルはコンパイラに読み込まれるので/

pg.248 s/名前空間/名前付き名前空間/(1つ目の表の先頭)

pg.255 s/extern "C" ccmp/extern "C" int ccmp/

pg.263 s/プログラムの実行環境(数百個にもなることがある)として1ダースのヘッダといつくかの標準ヘッダを/1ダースほどのヘッダに加え、プログラムの実行環境のための標準ヘッダ(数百個にもなることがある)を/

pg.267 s/前に作成されたデストラクタ/前に作成されたオブジェクトのデストラクタ/

pg.267 s/あとで作成されたデストラクタ/あとで作成されたオブジェクトのデストラクタ/

第10章:

pg.271 s/C++の組み込みデータ型とそれが持つ/C++の組み込みデータ型floatとそれが持つ/

pg.272 s/実装の偶発的な詳細/実装の副次的な詳細/

pg.272 s/本質的な意味を持つ特徴/本質的な意味を持つ特徴(たとえば、データにアクセスできる関数の完全なリスト)/

pg.275 s/誰かがそれを望んだから/誰かがそれを望むかもしれないから/

pg.276 s/そうとは限らない/明らかだとは言えない/

pg.276 s/Dateのデフォルト値機能には、隠された問題が無数に残されている/Dateの便利なデフォルト値機能には、ある重大な問題が隠されている。/

pg.276 s/Dateのデフォルトコンストラクタの/Dateコンストラクタのデフォルト値の/

pg.277 s/Date::default_dateが、Date()と/Date::default_dateの値をDate()と/

pg.279 s/非const関数は非constオブジェクト以外に対して呼び出すことはできない/非constメンバ関数はconstオブジェクトに対しては呼び出せない。/

pg.279 s/void f(Date d,/void f(Date& d,/

pg.279 s/たとえば、次のように書けば、/たとえば、dに1年1ヶ月1日を追加するときには、次のように書けるとよい。/

pg.279 s/dに1年1ヶ月1日を追加できるようにするには/そのためには/

pg.292 s/これらの作成方法/これらの作成方法の選択/

pg.293 s/Table tt;/Tables tt;/

pg.293 s/Cに対する互換性を確保するためのもので、実行時オーバーヘッドを招く恐れがある/Cに対する互換性を確保し、実行時オーバーヘッドを避けるためである/

pg.294 s/プログラム内の宣言が行われた場所で/プログラムの実行の流れが最初に宣言の箇所を通過したときに/

pg.294 s/終了するときに/終了するときに1度だけ/

pg.294 s/起動時”に/起動時”に1度だけ/

pg.294 s/終了時に/終了時に1度だけ/

pg.294 s/部分式を含む完全式が/部分を含む式が完全に/

pg.295 s/この変数のためにはコンストラクタは/この変数のためにはデフォルトコンストラクタは/

pg.296 s/コピーできなければならない/コピーしなければならない/

pg.296 s/オブジェクトポインタを引数として/オブジェクトポインタを対象として/

pg.298 s/外側のクラス自身のコンストラクタ/外側のクラス自身のコンストラクタ本体/

pg.298 s/メンバ初期設定リスト構文を使うことにしている。/メンバ初期設定リスト構文を使うことにしている。メンバ初期設定構文を使った方が効率が上がることも多い。/

pg.299 s/こうする代わりに、クラス宣言のなかのシンボル定数として列挙を使うこともできる/私はこれを欠陥だと思っている。クラス宣言のなかでシンボル定数が必要なときには列挙を使うようにしていただきたい/

pg.303 s/初期設定、終了処理だけを目的としたコンストラクタ、デストラクタを持つ型を作らなければならない場合、作ると便利な場合がある/ライブラリの初期設定、終了処理だけを目的とし、コンストラクタとデストラクタを持つ型を作らなければならない場合や作ると便利な場合がある/

pg.304 s/局所静的オブジェクトでよく使われる戦略(初回スイッチ)を使って適切な初期設定を保証しなければならない/多くの処理系が局所静的オブジェクトを実装するために使っている戦略(初回スイッチ)を利用すれば適切な初期設定を保証できる/

pg.307 s/特殊な大域アロケータを使うときのようなデストラクタの明示的な呼び出しは、/デストラクタの明示的な呼び出しは、特殊な目的の大域アロケータと同様に/

pg.309 s/コンストラクタの引数として指定された時間中に数字を数え続ける/コンストラクタの引数として指定された間隔ごとに、そこに含まれる数値の個数を数える/(練習問題5)

pg.311 s/文字列が含まれていた行の文字列と行数を保持する/個々の文字列と、その文字列が含まれていた行の行番号一覧を保持する/(練習問題19)

第11章:

pg.313 s/それらの演算子を使うと便利な概念は、C++の組み込みデータ型に限られるものではない/伝統的に演算子が使われてきたコンセプトの大半は、C++では組み込みデータ型になっていない/

pg.314 s/簡便で頭に入りやすい表記を提供できる/伝統的に使われてきた簡便な表記を提供できることがある/

pg.314 s/+*演算子で操作できる2つの倍精度浮動小数点数で表現されている/2つの倍精度浮動小数点数で表現されており、+*演算子で操作できる/

pg.315 s/第2引数/第2被演算子/

pg.315 s/メンバへの参照手段/メンバへの直接的な参照手段/

pg.315 s/a* *p/a**p/

pg.315 s/定義が生きているとすれば/定義のもとでは/

pg.316 s/任意の前置演算子@について/任意の前置単項演算子@について/

pg.320 s/r1 = operator+(x.operator+(y,z))/r1 = operator+(operator+(x,y),z)/

pg.321 s/+演算子を定義しなければならない/+演算子を定義しなければならない。Fortranの用語でいえば、混合モード演算: mixed-mode arithmeticが必要である/

pg.322 s/複素数の平面に実数の線を/複素平面に実数直線を/

pg.329 s/代入演算子のX::operator=(Z)があってVZになるか、VからZへのユニークな変換方法があるなら/代入演算子のX::operator=(Z)があり、VZが同じ型かVからZへのユニークな変換方法があるなら/

pg.333 s/フレンドクラスは、friend宣言を囲んでいるスコープ内で宣言するか、フレンドを宣言しているクラスを囲む非クラススコープで先に定義しなければならない/フレンドクラスは、それをfriend宣言しているクラスを囲むスコープで先に定義するか、そのようなクラスを直接囲む非クラススコープで定義しなければならない/

pg.333 s/クラスを囲む隣接した非クラススコープ/クラスを直接囲む非クラススコープ/

pg.333 s/探索させることもできる/探索させることもできる(§8.2.6)/

pg.334 §11.5.1の最後のサンプルを次のものに差し替え.

// このスコープにf()はない

class X {
	friend void f();			// 無意味
	friend void h(const X&);		// 引数によって探索可能
};

void g(const X& x)
{
	f();		// f()はスコープ内にない
	h(x);		// Xのフレンドのh()
}
pg.334 s/最小限に抑えようとすることが先決である/最小限に抑えるとともに、アクセス関数の数をできる限り少なくすることが先決である/

pg.335 s/非constリファレンス引数(あるいは非constポインタ引数)を取るメンバ関数か大域関数でなければならない/メンバ関数か、非constリファレンス引数(あるいは非constポインタ引数)を取る大域関数でなければならない/

pg.335 s/基本データ型の左辺値を必要とする/基本データ型に対して実行するときに被演算子として左辺値を必要とする/

pg.335 s/ある呼び出し方法を選ぶことがある/片方の呼び出し構文を好んで使うことがある/

pg.343 s/mというメンバが指しているもの/指しているmというメンバ/

pg.345 s/当然のことである/当然であり、必要なことでもある/

pg.345 s/インクリメントやデクリメントによって配列内のオブジェクトが参照できるときに/インクリメントやデクリメントのあとも配列内のオブジェクトを参照できるときに/

pg.345 s/従来のポインタ/チェック付き/(2つ目の方のみ)

pg.346 s/従来のポインタ/チェック付き/

pg.349 s/トピックである/トピックである。残念ながら、これらの特徴を同時にすべて満足させることはできない/

pg.353 s/添字演算子/文字列クラスのために部分文字列演算子/(練習問題8)

pg.354 s/Vec4型を定義しなさい/Vec4型を定義しなさい。Vec4のためにoperator[]を定義しなさい/(練習問題15)

pg.354 s/通常の行列演算を定義しなさい/通常の行列演算を定義しなさい。さらに、Mat4のためにガウス消去法を行う関数を定義しなさい/

第12章:

pg.356 s/欠点/限界/

pg.362 §12.2.3の最後の段落として以下を追加(原著正誤表見落とし)

 プログラマがコピー代入演算子を定義していない場合には、コンパイラがコピー代入演算子を生成すること(§11.7)に注意していただきたい。つまり、代入演算子は継承されないということである。

pg.363 s/このような場合、私が取るのは、同種リスト、すなわち同じ型のオブジェクトのリストである/ここで、1の方法は、同種リスト、すなわち同じ型のオブジェクトのリストを作る/

pg.375 s/void reset_value()/void reset_value(int i)/

pg.376 s/定義している終了処理が(オプションで)実行される/(オプションで)定義している終了処理が実行される/

pg.376 s/グラフィカルに/クラス名を簡略化してグラフィカルに/

pg.376 s/伝統的な方法によるものよりもはるかに保守作業が楽で、/伝統的な方法よりもクリーンで、はるかに保守しやすく、しかも/

pg.379 s/ユーザーが知っているべきIval_boxファミリの個々のクラスについて、/Ival_boxファミリのクラスのなかのユーザーが知っているべき個々のインターフェイスのために/

pg.379 s/その機能は仮想コンストラクタ/それらの関数は(誤解を招く表現だが)仮想コンストラクタ/

pg.382 s/2個の座標(Point(x,y))によって規定される/2個の座標によって規定される(Point(x,y))/(練習問題2)

pg.382 s/2個のPointLine(w.current(),10))/2個のPointによって規定される(Line(w.current(),10))/(練習問題2)

pg.382 s/draw()実行後のShapeの現在位置/Shapedraw()を実行したあとの現在位置/(練習問題2)

pg.383 s/拾ったり捨てたりできるクラス/拾ったり捨てたりできるもの/(練習問題12)

第13章:

pg.386 s/stringostreamcoplex/stringostreamcomplex/

pg.408 s/多相的(ポリモーフィック)/多相的(ポリモーフィック): polymorphic/

pg.409 s/特定の型の追加方法の規定と理解すると役に立つ。/特定の型の追加方法の規定と理解するとよい。/

第14章:

pg.426 s/さまざまな論理ミスをキャッチできる/さまざまな論理ミスを見破ることができる/

pg.427 s/このコードのexceptionをキャッチするコードは、決して実行されない。“すべてをキャッチ”ハンドラを取り除いたとしても、bad_castexceptionの派生クラスなので、bad_castキャッチコードは決して実行されない。/このなかのexceptionのキャッチハンドラは、決して実行されない。bad_castのキャッチハンドラは、bad_castexceptionの派生クラスなので、たとえ“すべてをキャッチ”ハンドラを取り除いたとしても、決して実行されない。/

pg.440 s/exceptio-specification/exception-specification/

pg.443 s/set_unexpectedによって設定される/<exception>std::set_unexpected()によって設定される/

pg.445 s/set_unexpected_handler()で設定された/set_unexpected()で設定された/

pg.446 s/set_unexpected(§14.6.2)/set_unexpected()(§14.6.3.1)/

pg.453 s/コールバックを実装するための適切な/コールバックの実装に適した/(練習問題10)

第15章:

pg.478 s/class Io_date : public Date, public Io_obj();/class Io_date : public Date, public Io_obj { };/

pg.478 s/: assertion//

pg.487 s/"string"という文字列/"suspend"という文字列/

pg.488 s/仮想メンバポインタ(この場合のx)/仮想メンバポインタ(この場合のs)/

pg.491 s/sizeof(Manager)を返す/sizeof(Manager)を渡す/

第16章:

pg.514 s/implementation_dependent1/implementation_defined1/

pg.514 s/implementation_dependent2/implementation_defined2/

pg.522 s/vector<int>::iterator, vector<int>::iterator, const vector<int>::allocator_type&);/vector(vector<int>::iterator, vector<int>::iterator, const vector<int>::allocator_type&);/

pg.522 s/vector<int>::size_type, const int&, const vector<int>::allocator_type&);/vector(vector<int>::size_type, const int&, const vector<int>::allocator_type&);/

pg.529 s/s/サイズ変更されるvectorに要素のポインタ/サイズが変わるvectorの要素を指すポインタ/

pg.530 s/区間できる/交換できる/

pg.531 s/const<</cout<</

pg.533 s/通常の順番と逆順で/通常の順番と逆順の両方の順番で/

第17章:

pg.537 s/vectordequeは/ほとんどのコンテナは/

pg.539 s/O(n*n)やそれ以下の/O(n*n)やそれよりも劣悪な/

pg.542 s/if (q==y.end()) return false;//

pg.543 s/return !(y>x);/return !(y<x);/

pg.543 s/return !(x>y);/return !(x<y);/

pg.556 s/implementation_defined1/implementation_defined1/

pg.556 s/implementation_defined2/implementation_defined2/

pg.557 s/V>&p/V>&p)/

pg.564 s/*(m.insert/(*(m.insert/

pg.564 s/phone_book.erase/m.erase/

pg.572 s/&&/&/

pg.572 s/&|/|/

pg.572 s/&^/^/

pg.582 s/標準コンテナの演算について計測を行い、計算量を判定しなさい/標準コンテナ演算について何らかの性能計測を行い、計測結果に含まれている一定したファクタを見付けなさい/(練習問題1)

pg.582 s/文字の連続/文字のシーケンス/(練習問題3)

第18章:

pg.591 s/fruit.end(),/fruit.end()),/

pg.600 s/引数を取るメンバ関数を処理するクラス/1個の引数を取るメンバ関数を処理するクラス/

pg.600 s/mem_fun_ref()と呼ばれる)も必要である。/mem_fun_ref()と呼ばれる)も必要である。最後に、constメンバ関数のためのバージョンも必要になる。/

pg.602 s/template<class unary_negate<Pred>/template<class Pred> typename unary_negate<Pred>/

pg.602 s/template<class binary_negate<Pred>/template<class Pred> typename binary_negate<Pred>/

pg.612 s/,oper.end()//

pg.629 s/ベクタにコピー/vectorにコピー/(練習問題19)

第19章:

pg.636 s/input_iterator_tag()/input_iterator_tag {}/

pg.636 s/output_iterator_tag()/output_iterator_tag {}/

pg.643 s/proxy operator++(int); \/\/ 前置/proxy operator++(int); \/\/ 後置/

第20章:

pg.669 s/implementation_defined/implementation_defined/ 2回

pg.687 s/strn関数/strncpy()/

pg.687 s/C strchr()/Cのstrchr()/

第21章:

pg.706 s/implementation_defined2/implementation_defined2/

pg.710 s/(f.f)/(f,f)/

pg.715 s/implementation_defined1/implementation_defined1/

pg.729 s/implementation_defined3/implementation_defined3/

pg.734 s/implementation_defined4/implementation_defined4/

第22章:

pg.756 s/implementation_defined/implementation_defined/ 2回

pg.758 s/演算をインライン化することができるし、valarray演算は副作用から自由だと考えてよい(もちろん、明示的な引数を除く/valarray演算はインライン化が認められており、副作用がないことが前提条件となっている(もちろん、明示的な引数の副作用を除く)/

pg.758 s/valarrayはエリアスフリーだと考えられており/valarrayは別名オブジェクトが存在しないことが前提条件となっており/

pg.767 s/double operator()(size_t x, size_t y);/double operator()(size_t x, size_t y) const;/

pg.774 s/gslice_arrayは、valarrayの添字として/mask_arrayは、valarrayの添字として/

pg.777 22.5節の最後のコードを以下のように変更。

void f(complex cf, complex cd, complex cld, complex ci)
{
    complex<double> c1 = cf;       // 問題なし
    complex<double> c2 = cd;       // 問題なし
    complex<double> c3 = cld;      // エラー: 精度低下の可能性あり
    complex<double> c4(cld);       // ok: 明示的な変換
    complex<double> c5 = ci;       // エラー: 変換なし

    c1 = cld;                       // okだが注意: 精度低下の可能性あり
    c1 = cf;                        // ok
    c1 = ci;                        // ok
}
付録C:

pg.951 s/v[0]でも同じ意味なのでよさそうなものだが、vが型エラーになってしまう/v[0]なら同じ意味なのでかまわないが、vでは型エラーになってしまう/

pg.957 s/割り当てられないので/割り当てられないし/

原著: 入力ミス

第19章:

pg.644 s/§3.7.1/§3.7.2/

第22章:

pg.782 s/1000/100,000/

第24章:

pg.836 s/§24.2.4/§24.3.6/

付録A:

pg.917 base-specifierに含まれているvirtualvirtual

付録C:

pg.980 s/vector::sort()/List::sort()/

翻訳: 入力ミス

第1章:

pg.35 s/Smalltalkのスタイル/Smalltalk等々のスタイル/

pg.41 s/§12.7/§12.7[11]/

pg.42 s/言語機能を利用できるように設計されている。/言語機能を利用できるように設計されている[Stroustrup, 1994, §4.5]。/

pg.44 s/malloc/malloc()/

pg.49 s/Rosier/Rosler/ 2回

第2章:

pg.54 s/char変数/char変数/

pg.54 s/int変数/int変数/

pg.55 s/<</<</

pg.55 s/>>/>>/2回

pg.55 s/cout/cout/

pg.55 s/cin/cin/

pg.55 s/\n/\n/

pg.55 s/n/n/

pg.56 s/case定数/case定数/

pg.56 s/false/false/

pg.56 s/[]/[]/

pg.56 s/*/*/

pg.57 s/0/0/2回

pg.57 s/v/v/

pg.57 s/v[0]/v[0]/

pg.57 s/v[9]/v[9]/

pg.57 s/&/&/

pg.57 s/i/i/4回

pg.57 s/10/10/

pg.57 s/++/++/

pg.57 s/1/1/

pg.57 s/push()/push()/

pg.57 s/pop()/pop()/

pg.57 s/Stack/Stack/

pg.58 s/push()/push()/

pg.58 s/pop()/pop()/

pg.58 s/Stack/Stack/

pg.59 s/stack.h/stack.h/2回

pg.59 s/user.c/user.c/2回

pg.59 s/stack.c/stack.c/

pg.59 s/モジュール化を実現することである。/モジュール化を実現することである(第8、9章)。/

pg.60 s/Stack::push()/Stack::push()/2回

pg.60 s/Stack::Overflow/Stack::Overflow/

pg.61 s/役不足/力不足/

pg.62 s/“Repのリファレンス”/“Repのリファレンス”(§5.5)/

pg.62 s/stack表現データ/スタック表現データ/

pg.62 s/Stack::stack/Stack::stack/

pg.64 s/あるいは/あるいは/

pg.65 s/char *p/char *v/

pg.65 s/class Bas_size/class Bad_size/

pg.68 s/lc/lc/

pg.73 s/スタックをテンプレート化し/スタックをテンプレート: template化し/

pg.74 s/標準ライブラリ/標準ライブラリ(§3.8、第18章)/

pg.74 s/*/*/

pg.74 s/インクリメント演算子の++/インクリメント演算子の++/

第3章:

pg.80 s/i/i/

pg.80 s/10/10/

pg.82 s/stringには、Cスタイルの文字列を/今示したように、stringにはCスタイル文字列を/

pg.82 s/printf()を/printf()(§21.8)を/

pg.84 s/スペースなどの空白文字/スペースなどの空白文字(§5.2.2)/

pg.85 s/vector<Entry>/vector<Entry>/

pg.87 3.7.2節の最後のコードの冒頭3行を以下の2行に訂正。

int main()
try {
pg.88 s/map型を提供している/map型(§17.4.1)を提供している/

pg.89 s/ヘッダファイルで宣言されている/ヘッダファイルで宣言されている(§16.2)/

pg.89 s/Vecも/Vec(§3.7.2)も/

pg.90 s/Realloc()(§16.3.5 を使った/realloc()(§16.3.5)を使った/

pg.91 s/charc/char c/

pg.95 s/mapは、(string,int)のシーケンス/このmapは、(string,int)の対のシーケンス/

pg.96 s/マップ/map/ 3回

pg.98 s/template<class C>complex<C>/template<class C> complex<C>/

第4章:

pg.110 s/sizeof演算子によって取得できる。/sizeof演算子によって取得できる(§6.2)。/

pg.110 s/l1/1/

pg.110 s/wchart/wchar_t/

pg.110 s/longdouble/long double/

pg.110 s/signedN/signed N/ 2回

pg.111 s/列挙は、ユーザーが指定した/列挙: enumerationは、ユーザーが指定した/

pg.112 s/constant-expression/定数式: constant-expression/

pg.113 s/演算子の動作を定義できる/演算子の動作を定義できる(§11.2.3)/

pg.114 s/参照したいただきたい/参照していただきたい)/

pg.116 s/newintなどのC++のキーワード/newintなどのC++のキーワード(付録A)/

pg.121 s/doubleを選択するようにせよ。§4.6/doubleを選択するようにせよ。§4.5/

第5章:

pg.124 s/占有することに注意していただきたい/占有することに注意していただきたい(§4.6)/

pg.125 s/連続処理演算子として使われ/連続処理演算子として使われ(§6.2.2)/

pg.127 s/結合されるのえ/結合されるので/

pg.128 s/ワイド文字による文字列である/ワイド文字による文字列である(§4.3、§C.3.3)/

pg.134 s/多重定義演算子/多重定義演算子(第11章)/

pg.138 s/state[2]/state[2];/

pg.141 s/q->m = 8/q->m = 7/

pg.141 s/struct S2 { int b; }/struct S2 { int a; }/

pg.142 s/定義して使え。§5.4/定義して使え。§4.8、§5.4/

第6章:

pg.146 s/追加する必要があるだろうが/追加する必要があるだろうが(§6.6[20])/

pg.146 s/-primary/- primary/

pg.146 s/(expression)/( expression )/

pg.151 s/cin.putbach/cin.putback/

pg.153 s/get_tokenの/get_token()の/

pg.153 s/isspace(c)を/isspace()を/

pg.155 s/返すことになっている/返すことになっている(§3.2)/

pg.159 s/class_name::member/class_name :: member/

pg.159 s/namespace_name::member/namespace_name :: member/

pg.159 s/::name/:: name/

pg.159 s/::qualified-name/:: qualified-name/

pg.160 s/. */.*/

pg.160 s/-> */->*/

pg.160 s/throw/throw/

pg.161 s/int */int* / 2回

pg.162 s/short-circuit/short-circuit evaluation/

pg.165 s/ifwhilefor文/ifwhilefor文(§6.3.2、§6.3.3)/

pg.171 s/0Xff00/0xff00/

pg.171 s/受け継いでいる/受け継いでいる(§B.2.3)/

pg.175 s/l<p->count/1<p->count/

pg.175 s/l<p->count/1<p->count/

pg.182 s/整数か浮動小数点数の値から構成され、空白で区切られた/浮動小数点数の値から構成される(名前,値)の/(練習問題3: C++ Solutionに合わせたもの)

pg.182 s/プログラムを書きなさい。/プログラムを書きなさい。ヒント: §6.1.8(練習問題3)

第7章:

pg.191 s/return分/return文/

pg.194 s/dqrt(fla)/sqrt(fla)/

pg.195 s/void f(int)/void f(int);/

pg.202 s/アルゴリズムのsort/アルゴリズムのsort(§18.7.1)/

pg.203 s/order\n;/order:\n";/

pg.203 s/number\n;/number:\n"/

pg.205 s/(n>1) ?n*FAC(n-1):1/(n>1)?n*FAC(n-1):1/

pg.205 s/::を使った方がよい/::(§4.9.4)を使った方がよい/

pg.208 s/任意の個数の名前を取り、それらのファイルを/任意の個数のファイル名を取り、それらのファイルを/(練習問題4)

第8章:

pg.213 s/より大規模なプログラム/この電卓のようなわざとらしさのないより大規模なプログラム/

pg.213 s/電卓プログラム(§6.1.1)の構文解析器/電卓プログラムの構文解析器(§6.1.1)/

pg.215 s/大域的でなければならない/大域的でなければならない(§8.3.3)/

pg.217 case Lexer::Div:の前の空行を除去

pg.218 using namespace Lexer; // Lexerのすべての名前を利用できるようにするの前に空行を挿入

pg.221 namespace Parser_interface {の前に空行を挿入

pg.226 s/operator-/operator+/

pg.226 s/Vector<string>/Vector<String>/

pg.226 s/String)がなければ/Stringが宣言されていなければ/

pg.227 s/His_stringで定義されている/His_stringで宣言されている/

pg.227 s/Stringにメンバを追加したり/Stringにメンバ関数を追加したり/

pg.232 s/#include <stdio.h>/#include<stdio.h>/

pg.232 // 私のヘッダnamespace Mine {の間に空行を挿入

pg.232 s/名前空間(§8.2.8)を使うことを選ぶ/名前空間を使うことを選ぶ(§8.2.8)/

pg.234 s/Range_Error/Range_error/

pg.240 s/argv[])/argv[] \/\/ だめなスタイルの例/

第9章:

pg.262 s/<table>.h/"table.h"/

pg.267 s/Cヘッダは名前空間に#includeせよ/Cヘッダは名前空間に#includeせよ(§9.2.2)/

pg.268 s/インクルードガイド/インクルードガード/(練習問題5)

pg.268 s/呼び出しとしてでも呼び出せる/呼び出しとして実行できる/(練習問題8)

pg.268 s/例外のかわりにerror/例外の代わりにerror/(練習問題9)

第10章:

pg.273 s/関数を呼び出された/メンバ関数呼び出しの対象となった/

pg.274 s/structは、デフォルトでメンバが公開されているクラスに過ぎない/structは、デフォルトでメンバが公開されているclassに過ぎない(§10.2.8)/

pg.282 s/string s1 = /string s3 = /

pg.282 s/string s2 = /string s4 = /

pg.290 末尾の//...の前の空行を削除

pg.291 s/動作を意図したものではない(§2.5.5、§12.2.6)/動作(§2.5.5、§12.2.6)を意図したものではない/

pg.293 Table tt;の行の上に空行

pg.294 X x; // エラー: Xにはデフォルトコンストラクタがないの行の上に空行

pg.296 s/あるいは、コンテナの/あるいは、少なくともコンテナの/

pg.296 s/外観を与えること)/外観を与えること。§11.12参照)/

pg.298 : name(n), founded(fd)の行の前の空行を削除

pg.306 s/const strng&/const string&/

pg.308 s/structと定義されている/structと定義されている(§C.8.2)/

pg.308 s/使うべきものである/使うべきものである(§10.6[20]参照)/

pg.311 s/>>/> >/(練習問題19.9)

第11章:

pg.315 s/参考条件式演算子/3項条件式演算子/

pg.321 complex r = a;の上に{だけの行を挿入

pg.322 complex r = b;の上に{だけの行を挿入

pg.327 s/complex& operator+=(dobule)/complex& operator+=(double)/

pg.327 s/-=, +=/-=, *=/

pg.331 s/staticを宣言すると/static(§10.2.4)を宣言すると/

pg.336 s/const Matrix arg2/const Matrix& arg2/

pg.336 s/このoperator+/このoperator+()/

pg.337 s/し過ぎることはないほどだ/し過ぎることはないほどだ(§10.4.4.1)/

pg.340 s/Pari(s,0)/Pair(s,0)/

pg.341 s/()の呼び出し演算子/呼び出し演算子の()/

pg.346 s/後置/前置/(operator *()の行)

pg.348 ~String();の後ろに空行を挿入

pg.350 s/x.operator/s.operator/

pg.352 s/exter /extern /(練習問題1)

pg.353 s/i +10/i + 10/(練習問題1)

pg.353 s/プログラムを書き換え/プログラムを書き換えて/(練習問題1)

pg.354 s/char * q/char* q/(練習問題20)

第12章:

pg.366 s/定義も提供しなければならない/定義も提供しなければならない/

pg.376 s/BBwindow用の/BBwindow用の/

pg.381 s/次のクラスを定義し、/次のクラスを定義する。/(練習問題1)

pg.381 s/baseから/このとき、baseから/(練習問題1)

pg.382 s/Point(0,9)/Point(0,0)/(練習問題2)

pg.382 s/(南、/(南)、/(練習問題2)

pg.382 s/soliddasheddotted/solid(実線)、dashed(破線)、dotted(点線)/

pg.383 s/task::savetask::restore/task::save()task::restore()/(練習問題11)

pg.383 s/queue/queue(待ち行列)/

第13章:

pg.396 s/sqrt<double>(complex<double)/sqrt<double>(complex<double>)/

pg.397 s/f<int>(static_cast<B<int>*>(pd)/f<int>(static_cast<B<int>*>(pd))/

pg.408 s/implicit_cast(§C.6.2.6)/implicit_cast(§13.3.1)/

pg.411 s/Ptr(T2*)<?b>/Ptr(T2*)/

pg.411 s/template<class T, class T2)/template<class T, class T2>/

pg.414 s/を書きなさい(非侵入的リスト: non-intrusive list)/(非侵入的リスト: non-intrusive list)を書きなさい/(練習問題2)

第14章:

pg.431 s/void g(Circle* p)/void g(Circle* pc)/

pg.440 s/(std::bad_alloc); };/(std::bad_alloc);/

pg.443 s/class Yunexpected : Yerr();/class Yunexpected : Yerr {};/

pg.445 s/typedef void(*unexpected_handler)();/typedef void(*terminate_handler)();/

pg.445 s/unexpected_handler set_terminate(unexpected_handler);/terminate_handler set_terminate(terminate_handler);/

第15章:

pg.478 s/エラー: Dataは多相的ではない/エラー: Dateは多相的ではない/

pg.487 s/full_Size()/full_size()/

pg.492 s/delete[](p;)/delete[](p);/

第16章:

pg.509 s/Link+/Link*/

pg.526 s/invert()/insert()/

pg.528 s/const(max/count(max/

pg.530 s/clas T/class T/ 2回

第17章:

pg.541 s/equv(x,y)/equiv(x,y)/

pg.542 s/bool operator()(const string&, const string& y) const;/bool operator()(const string&, const string&) const;/

pg.542 s/bool Nocase::operator()(const string& x, const string&) const/bool Nocase::operator()(const string& x, const string& y) const/

pg.542 s/ただのsort(fruit.begin/ただのsort(fruit.begin()/

pg.545 s/fruit.splice(c,citrus/fruit.splice(p,citrus/

pg.552 s/push_back x);/push_back(x);/

pg.554 下から6行目のPqueue;のフォント誤り

pg.556 s/Class T/class T/

pg.561 s/const iterator/const_iterator/

pg.564 s/("Dogbert",/("Dogbert"),/

pg.565 // !=、<、>、<=、>=も同様の部分、フォント不揃い

pg.566 s/§??/§17.4.1.7/

pg.566 s/*(i).second/i->second/

第18章:

pg.586 s/list<string>::iterator/list<string>::const_iterator/

pg.587 s/repalce_copy_if()/replace_copy_if()/

pg.588 s/unique_copy/unique_copy()/

pg.588 s/reverse_copy/reverse_copy()/

pg.588 s/random_shuffle/random_shuffle()/

pg.589 s/includes/includes()/

pg.589 s/lexicoGraphical_compare()/lexicographical_compare()/

pg.595 s/§18.4.2で定義を示す/§18.4.2に定義を示してある/

pg.602 s/unari_function/unary_function/

pg.606 s/int*::differnce_type/int*::difference_type/

pg.626 s/lexicoGraphical_compare()/lexicographical_compare()/

第19章:

pg.636 s/class IN/class In/

pg.637 s/iteartor_traits<T>::iterator_category/iterator_traits<T>::iterator_category/

pg.637 s/output_iteartor_tagバージョンが/output_iterator_tagバージョンが/

pg.637 s/ostream_iteartor<char>& os1/ostream_iterator<char>& os1/

pg.637 s/<char.& os2)/<char>& os2)/

pg.638 s/push_back()()/push_back()/

pg.639 s/reverse iterator() : current() { }/reverse_iterator() : current() { }/

pg.641 s/= char//

pg.644 s/checked_iter/Checked_iter/

pg.648 s/clas C/class C/

pg.650 s/throw(9;/throw();/

pg.651 s/allocator<void>:pointer/allocator<void>::pointer/

pg.652 s/alloc.allocator(n)/alloc.allocate(n)/

pg.652 s/Links/Link/

pg.653 s/先ほどのtypedef/先ほどのtypedef/

pg.654 s/oprator/operator/

pg.654 s/Unsigned/unsigned/

pg.654 s/Head/head/

第20章:

pg.676 s/DATA()/data()/

第21章:

pg.701 s/プログラマはプログラマは/プログラマは/

pg.705 s/cin <</cout <</

pg.711 s/failbits/failbit/

pg.743 s/小数点以下に数字が内/小数点以下に数字がない/

第22章:

pg.757 s/v5(vd.8)/v5(vd,8)/

pg.775 s/typedef std::complex<double> complex/typedef std::complex<double> complex;/

第23章:

pg.787 s/イントロダクション(§23.2)/イントロダクション(§23.2)/(開き括弧を1バイト文字から2バイト文字に)

第24章:

pg.836 s/§24.2.5/§24.3.7/

付録A:

pg.905 s/f 1 F L/f l F L/(数字の1ではなく、小文字のl)

付録B:

pg.924 s/return a\/*/return a\/\/*/ (aのあとの/は1つではなく、2つだという意味です)

pg.925 s/見とめない方向で/認めない方向で/

pg.926 s/wchar_1/wchar_t/

pg.934 s/for文が終わったあとでiを参照している/for-statementが終わったあとでiを参照している/

付録C:

pg.940 上の表の三重字を右の欄に移動

pg.952 s/1バイトにまとめてに/1バイトにまとめても/


その他の誤りに気付かれた方は、翻訳会議室にポストするか訳者宛メールにてお知らせ下さい。
[フロントページ][技術翻訳][詩][Hypertext][その他]

mailto: webmaster@longtail.co.jp