C++ Primer (第四版)勘误

转》C++ Primer (第四版)勘误

英文原版勘误:
http://ptgmedia.pearsoncmg.com/images/9780201721485/Errata/Lippman_0201721481_Errata.html

博客内容转自:http://student.csdn.net/space.php?uid=130620&do=blog&id=21655

C++ Primer (第四版)勘误: 我自己整理的网上资料.

1.
在《C++ Primer》第四版section9.2. Iterators and Iterator Ranges中的Table 9.4. Operations Supported by vector and deque Iterators中列出了两种运算:

iter1 += iter2
iter1 -= iter2


Compound-assignment versions of iterator addition and subtraction. Assigns the value of adding or subtracting iter1 and iter2 into iter1.

一看到这两个表达式时就感觉有点怪,因为指针和迭代器是非常相似的,而指针并不支持+=、-+复合赋值运算符。在VS2005中写了个小测试程序却 得到了如下错误:

error C2679: binary '+=' : no operator found which takes a right-hand operand of type 'std::_Vector_iterator<_Ty,_Alloc>' (or there is no acceptable conversion)

google一下,很多人说应该是作者的错误。于是查了C++ Primer Errata(勘误表),(英文版)Lippman已经对此进行勘误:

Page 313: The description of the compound assignment operators in Table 9.4 incorrectly refer to iter2 as the right-hand operand; in each instance, iter2 should be replaced by n. The right-hand operand must be an integral value, not an iterator.

正确的形式应该为:

iter1 += n
iter1 -= n

2.

来自CSDN一位网友的博客:

P13(第13页) “不是所有编译器都有这一要求”后半句应翻译为“都满足这一标准”。

影响阅读程度:严重

 

说明:“编译器”如何能“要求”C++标准?原英文版中的“enforce”应翻译为“满足”而不是“有”,动宾关系才不会搞反。

 

P43 “有多个初始化式时不能使用复制初始化”前半句应翻译为“有多个初始化参数时”。

影响程度:一般

 

P45 “如果定义某个类的变量时没有提供初始化式….”这句和后一句应翻译为“如果定义某个类的变量时没有提供初始化参数,那么系统会调用该类的’缺省构造函 数’。”

影响程度:一般

 

P50 有三处的“const变量”翻译为“const常量”或“const对象”比较好,虽然原英文版有两处也是用const variable。

影响程度:轻微

 

P52 “仅允许const引用绑定到需要临时使用的值”应翻译为“仅允许const引用绑定到需要临时值中转来完成绑定过程的对象”

影响程度:严重

 

说明:译者对宾语的主体理解错误。原英文版中的“临时使用的值”是用来修饰value(对象)的,不是最终的宾语。

因为对于程序员来说,编译器做的中转工作是透明的,const引用最终还是绑定到对象,虽然结果相同。

 

P65 “word(字)机器上的自然的整型计算单元”应翻译为“word(字)是在给定机器上进行整型计算的原始单元”

影响程度:一般

 

P79 “v4含有值初始化的元素”这句应翻译为“v4含有n个用缺省构造函数中的值初始化的元素”

影响程度:严重

 

P79 “动态地添加元素”这句应翻译为“当元素值已知时,最好是通过动态地向它添加元素,来让它增长。”

影响程度:一般

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/SearchLife/archive/2008/12/10/3490669.aspx

 

3.


页码 行数 原译文 更正 备注     
70 -6 String string      
80 13 vector<string> fvec(10) vector<int> fvec(10)      
119 15 pc + 1 pc      
120 -13 解释这两个程序 解释这两段程序      
228 2 添加两个Sales_item对象 将两个Sales_item对象相加      
268 13 存储deque对象里的元素 存储deque对象元素      
269 -3 与vector对象的一个元素捆绑在一起 绑定到vector对象的一个元素      
278 -10 长度大小 大小      
281 -11 必须确保迭代器是不是end迭代器 必须确保迭代器不是end迭代器      
300 -13 2.覆写基础容器类型 2.覆盖基础容器类型      
300 -11 覆写 覆盖      
325 -12 名字 及其作品      
338  5-6 第二个迭代器所指向的元素[有时被称为超出末端迭代器(off-the-end iterator)] 第二个迭代器[有时被称为超出末端迭代器(off-the-end iterator)]所指向的元素 
446 -2 另一个指向数组的末端 另一个指向超出数组末端的下一位置     
451 -7 但测试给定的长度是否与其边界相匹配 但测试给定string对象的长度是否与其边界相匹配    
457 -7 const int(); operator const int();      
457 -6 int() const; operator int() const;      
463 -13  成员函数应指定为public      
463 -5 public public:      
466 13  成员函数应指定为public      
466 21 complex Complex      
474 -8 保留字 保留字virtual      
487   习题之上的代码段最后加上一个“}”     
491 -3 std::string& book, double sales_price, std::string& book="", double sales_price=0.0,    
496 16 基类几乎总是需要构造函数 基类几乎总是需要析构函数      
506 -4 减1 加1      
509 10 使用带关联容器的比较器 使用带比较器的关联容器      
511 -16 该操作符返回句柄所关联的基础Item_base对象,用该Item_base对象调用 该操作符返回句柄所关联的基础Item_base对象的指针,用该Item_base对象指针调用 
516 11 构造函数 析构函数      
542 -5 调用 定义      
542 -17 传递两个字符串字面值调用compare是切合实际的 使得可以传递两个字符串字面值调用compare    
543 2 方式构造程序的 构造程序的方式      
550 ‘-18及-16 Queue<int> Queue<string>      
551 -4 解释为什么 解释导致什么实例化      
605 -12 为什么在程序中可以定义自己的命名空间? 为什么在程序中定义自己的命名空间?
#c/c++/other

你可能感兴趣的:(C++ Primer (第四版)勘误)