《高质量程序设计指南——C++/C》(第三版)最新修订

1.Page 7:倒数第13行,“啰里啰唆”印刷有点儿问题;
2.Page 15:表1-2有些许印刷问题;
3.Page 56:“4.3 类型转换”一节上面一段末尾应从“关于复合...”处另起一行;
4.Page 58:示例4-6,代码用下列代码替换:
 
  5.Page 76:示例4-13上半部分最后一行“delete a[];”要右移4格对齐;下半部分最后一行左移4格对齐;
6.Page 81:示例4-20中的注释/*第三条...*/修改为/*第二条...*/;
7.Page 82:将例4的内容整个替换为:
例4:协助破案。假设已经查清,有A、B、C、D、E五个嫌疑人可能参与制造了一起银行抢劫案,但是不知道其中到底哪几个人是真正的案犯。不过,有确凿证据表明:
    ① 如果A参与了作案,则B一定也会参与。
    ② B和C两人中只有一人参与了作案。
    ③ C和D要么都参与了作案,要么都没有参与。
    ④ D和E两个人中至少有一人参与作案。
    ⑤ 如果E作案,则A和D一定参与作案。
是不是有点绕口?我们可以用数理逻辑中的正规表达式来表示上述论断:
    ①   A→B
    ② (B∧ C)∨( B∧C)
    ③ (C∧D)∨( C∧ D)
    ④ (D∨E)
    ⑤   E→(A∧D)
我们现在用1(可理解为TRUE)表示作案,0(可理解为FALSE)表示未作案,则每个人的取值范围就是{0,1}。然后我们在5个人取值的所有可能的组合空间中进行搜索,如果某个组合同时满足这5条线索,那么它就是本案的答案了。于是,上述正规表达式可以进一步表示为下列C++/C逻辑表达式:
    ① A == 0 ||(A == 1 && B == 1)
    ② B + C == 1
    ③ C == D
    ④ D + E >= 1
    ⑤ E == 0 ||(E == 1 && A == 1 && D == 1)
我们用另一个变量count来表示组合空间中某一个组合能够满足几条论断,如果出现了这样一个组合:它同时满足了这5条论断,那么它就是我们要找的组合。程序见示例4-21。
                                                    示例4-21
 
      [注:] 这个例子的另一个更直接的解法参见文章“关于《高质量》第三版第4.13节例4的更正!”。
8.Page 83:在“最后我们举一个数值计算...。”一行前面插入“例5:数值计算。”;
9.Page 88:[建议5-1]中的示例代码:两个MAX和PI应该垂直对齐,后面的注释也垂直对齐;
10.Page 91:“C++程序”所在一行中:右边的[方法二]和左边的[方法二]要水平对齐,调整后后面的[方法三]和[方法四]也要分别与左边的[方法三]和[方法四]水平对齐;
11.Page 93:倒数第10行,将“…定义和初始化每一个常量时,一次一个样。”修改为“…定义和初始化每一个常量一次。”;
12.Page 96:示例6-1:将“T是形参”修改为“_T是形参”;
13.Page 107:示例6-8中,后面的注释行要垂直对齐;
14.Page 122:示例7-1中,所有“cout <<...”行中的“:0x”要垂直对齐;
15.Page 144:示例8-5右半边“char ch; ”一行要缩进4格垂直对齐;
16.Page 147:上方代码中最后一个“:8”中间插入一个空格;
17.Page 149:示例8-9中,将“sizeof(X) = 4”修改为“sizeof(X) = 8”;
18.Page 154/155:图8-6和图8-7中m_price的长度应该是8字节而不是4字节,这是个笔误。修正后的图参见相册中的图8-6和图8-7。
19.Page 167:第(7)条中,“#define SQUARE(x)((x)*(x))”中间要插入几个空格,即修改为“#define  SQUARE(x)    ((x)*(x))”;“#define SQUARE(x)x * x”的中间也插入几个空格,即修改为“#define SQUARE(x)     x * x”;
20.Page 168:第(8)条中,把“否则将导致变量的多次求值”修改为“否则可能导致变量多次求值,且结果可能与预期不符,因为复合表达式中子表达式的求值顺序可能因具体编译器的不同而不同。”;
21.Page 168:第(8)条中,把“其结果将是30而不是期望的25,这是因为展开的结果为:int x = ((n++) * (n++));”修改为“其结果可能是30,但也可能是25。”;
22.Page 170:示例9-2中,将下列代码:
 
 
23.Page 181:[建议10-5]中,把“/t”修改为‘/t’;
24.Page 183:示例10-6用下面的代码替换:
 
25.Page 193:示例12-3的代码用下面的代码替换:
 
26.Page 196:示例12-6中,三个class所在行对齐有问题,后面两个class行要左移4空格垂直对齐;
27.Page 199:图12-1用相册中的图12-1替换(原图没有使用斜体)。
28.Page 200:示例12-11中,class Eye的“public:”所在行左移4格垂直对齐,同时void行向右缩进4格;同时正数第13行“...返回其中任意一个接口指针”修改为“...返回其中任意一个接口的指针”;
29.Page 201:上方class Head的private部分以m_打头的部分要垂直对齐;
30.Page 207:倒数第12和13行,请把“//(3)”和“// OK!”垂直对齐;
31.Page 210:示例12-19,最后一行向左移4格垂直对齐;
32.Page 233:上方“class B”行向左移4格垂直对齐;
33.Page 270:把示例15-3中第8行到第13行分别左移4格;
34.Page 275:把[建议15-1]中的“比如反跟踪”修改为“(比如反跟踪)”;
35.Page 297:示例16-10:最后的“catch”一行向左移4格对齐;
36.Page 301:正数第6行末尾句号改为冒号;
37.Page 309:把“…必须派生自类似于接口IUnknown类”修改为“…必须派生自类似于接口IUnknown的类”;
38.Page 309:将图16-1用相册中的图16-1替换。
39.Page 310:示例16-22中间“strVect.insert(…);”、“}”和“…”所在的三行都分别右缩进4格;
40.Page 310:将“而不是真正数据”修改为“而不是真正的数据”;将“…指针元素指向对象”修改为“…指针元素所指对象”;
41.Page 317:最后一行末尾句号修改为冒号;
42.Page 320:示例16-30,把“void func()”和“{”两行左移4格对齐;
43.Page 320:示例16-31中,把最后一行右缩进4格对齐;
44.Page 333:正数第15行末尾句号改为冒号;
45.Page 341:倒数第9行末尾句号改为冒号;
46.Page 343:示例17-7用下面的代码替换:
 
 
47.Page 348:将“顾名思义”这一段第二行的“输出功能”改为“输入/输出功能”;
48.Page 357:图17-12存在一些问题,不知道是印刷问题还是绘图有问题。修正后的图参见相册中的图17-12。
49.附录E:“POD”所在行右边中文解释没有对齐,只需在末尾换行即可。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页