第0章 导读(译者的话)(2)
有时候考虑到上下文的因素,面对同一个名词,在译与不译之间,我可能会有不同的选择。例如,面对"pointer",我会译为"指针",但由于我并未将reference译为"参考"(实在不对味),所以如果原文是"the manipulation of a pointer or reference in C++(www.cppentry.com)……",为了中英对等或平衡的缘故,我不会把它译为"C++(www.cppentry.com)中对于指针和reference的操作行为……",我会译为"C++(www.cppentry.com)中对于pointer和reference的操作行为……"。
译注
书中有一些译注。大部分译注,如果比较短的话,会被我直接放在括号之中,接续本文。较长的译注,则被我安排在被注文字的段落下面(紧临,并加标示)。
原书错误
这本书虽说质地极佳,但制作的严谨度却不及格!有损Lippman的大师地位。
属于"作者笔误"之类的错误,比较无伤大雅,例如少了一个;符号,或是多了一个;符号,或是少了一个}符号,或是多了一个)符号,等等。比较严重的错误,是程序代码变量名称或函数名称或class名称与文字叙述不一致,甚或是图片中对于object布局的画法,与程序代码中的声明不一致。这两种错误都会严重耗费读者的心神。
只要是被我发现的错误,都已被我修正。以下是错误更正列表。
示例:L5表示第5行,L-9表示倒数第9行。页码所示为原书页码。
页码 原文位置 原文内容 应修改为
p.35 最后一行 Bashful(), Bashful();
p.57 表格第二行 1.32.36 1:32.36
p.61 L1 memcpy...程序代码最后少了一个)
p.61 L10 Shape()...程序代码最后少了一个}
p.64 L-9 程序代码最后多了一个 ;
p.78 最后四行码 == 似乎应为 =
p.84 图3.1b说明 struct Point3d class Point3d
p.87 L-2 virtual...程序代码最后少了一个;
p.87 全页多处 pc2_2(不符合命名意义) pc1_2(符合命名意义)
p.90 图3.2a说明 Vptr placement and end of class Vptr placement at end of class
p.91 图3.2b __vptr__has_vrts __vptr__has_virts
p.92 码L-7 class Vertex2d class Vertex3d
p.92 码L-6 public Point2d public Point3d
p.93 图3.4说明 Vertex2d的对象布局 Vertex3d的对象布局
p.92~p.94 符号名称混乱,前后误谬不符 已全部更改过
p.97 码L2 public Point3d, public Vertex 配合图3.5a和图3.5b,应调整顺序为public Vertex, public Point3d
p.99 图3.5a 符号与书中程序代码多处不符 已全部更改过
p.100 图3.5b 符号与书中程序代码多处不符 已全部更改过
p.100 L-2 pv3d + ...最后多了一个)
p.106 L16 pt1d::y pt2d::_y
p.107 L10 & 3d_point::z; &Point3d::z;
p.108 L6 & 3d_point::z; &Point3d::z;
p.108 L-6 int d::*dmp, d *pd int Derived::*dmp, Derived *pd
p.109 L1 d *pd Derived *pd
p.109 L4 int b2::*bmp = &b2::val2; int Base2::*bmp = &Base2::val2;
p.110 L2 不符合稍早出现的程序代码 把pt3d改为Point3d
p.115 L1 magnitude() magnitude3d()
p.126 L12 Point2d pt2d = new Point2d; ptr = new Point2d;
p.136 图4.2右下 Derived::~close() Derived::close()
p.138 L-12 class Point3d...最后少了一个{
p.140 程序代码 没有与文字中的class命名一致 所有的pt3d改为Point3d
p.142 L-7 if ( this ...程序代码最右边少了一个)
p.143 程序代码 没有与文字中的class命名一致 所有的pt3d改为Point3d
p.145 L-6 pointer::z() Point::z()
p.147 L1 pointer::*pmf Point::*pmf
p.147 L5 point::x() Point::x()
p.147 L6 point::z() Point::z()
p.147 中段码L-1 程序代码最后缺少一个)
p.148 中段码L1 (ptr->*pmf)函数最后少了一个;
p.148 中段码L-1 (*ptr->vptr[..函数最后少了一个)
p.150 程序代码 没有与文字中的class命名一致 所有的pt3d改为Point3d
p.150 L-7 pA.__vptr__pt3d...最后少了一个;
p.152 L4 point new_pt; Point new_pt;
p.156 L7 { }
p.160 L11, L12 Abstract_Base Abstract_base
p.162 L-3 Abstract_base函数最后少了一个;
p.166 中,码L3 Point1 local1 = ... Point local1 = ...
p.166 中,码 L4 Point2 local2; Point local2;
p.174 中,码L-1 Line::Line()函数最后多了一个;
p.174 中下,码L-1 Line::Line()函数最后多了一个;
p.175 中上,码L-1 Line::~Line()函数最后多了一个;
p.182 中下,码L6 Point3d::Point3d() PVertex::PVertex()
p.183 上,码L9 Point3d::Point3d() PVertex::PVertex()
p.185 上,码L3 y = 0.0之前缺少float
p.186 中下,码L6 缺少一个return
p.187 中,码L3 const Point3d &p const Point3d &p3d
p.204 下,码L3 缺少一个return 1;
p.208 中下,码L2 new Pvertex; new PVertex;
p.219 上,码L1 __nw(5*sizeof(int)); __new(5*sizeof(int));
p.222 上,码L8 // new ( ptr_array...程序代码少了一个;
p.224 中,码L1 Point2w ptw = ... Point2w *ptw = ...
p.224 下,码L5 operator new()函数定义多了一个;
p.225 上,码L2 Point2w ptw = ... Point2w *ptw = ...
p.226 下,码L1 Point2w p2w = ... Point2w *p2w = ...
p.229 中,码L1 c.operator==( a + b ); c.operator=( a + b );
p.232 中下,码L2 x xx; X xx;
p.232 中下,码L3 x yy; X yy;
p.232 下,码L2 struct x _1xx; struct X _1xx;
p.232 下,码L3 struct x _1yy; struct X _1yy;
p.233 码L2 struct x __0__Q1; struct X __0__Q1;
p.233 码L3 struct x __0__Q2; struct X __0__Q2;
p.233 中,码 if条件句的最后多了一个;
p.253 码L-1 foo()函数最后多了一个;