0%

基本信息

名称: Exceptional C++(英文)
作者信息: 作者: Herb Sutter [ 英文 pdf ]

简单介绍

Exceptional C++ shows by example how to go about soundsoftware engineering in standard C++. Do you enjoy solving thornyC++ problems and puzzles? Do you relish writing robust andextensible code? Then take a few minutes and challenge yourselfwith some tough C++ design and programming problems. The puzzlesand problems in Exceptional C++ not only entertain, they will helpyou hone your skills to become the sharpest C++ programmer you canbe.

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
Item 1: Iterators. 

Item 2: Case-Insensitive Strings-Part 1.

Item 3: Case-Insensitive Strings-Part 2.

Item 4: Maximally Reusable Generic Containers-Part 1.

Item 5: Maximally Reusable Generic Containers-Part 2.

Item 6: Temporary Objects.

Item 7: Using the Standard Library (or, Temporaries Revisited).

EXCEPTION-SAFETY ISSUES AND TECHNIQUES.

Item 8: Writing Exception-Safe Code-Part 1.

Item 9: Writing Exception-Safe Code-Part 2.

Item 10: Writing Exception-Safe Code-Part 3.

Item 11: Writing Exception-Safe Code-Part 4.

Item 12: Writing Exception-Safe Code-Part 5.

Item 13: Writing Exception-Safe Code-Part 6.

Item 14: Writing Exception-Safe Code-Part 7.

Item 15: Writing Exception-Safe Code-Part 8.

Item 16: Writing Exception-Safe Code-Part 9.

Item 17: Writing Exception-Safe Code-Part 10.

Item 18: Code Complexity-Part 1.

Item 19: Code Complexity-Part 2.

CLASS DESIGN AND INHERITANCE.

Item 20: Class Mechanics.

Item 21: Overriding Virtual Functions.

Item 22: Class Relationships-Part 1.

Item 23: Class Relationships-Part 2.

Item 24: Uses and Abuses of Inheritance.

Item 25: Object-Oriented Programming.

COMPILER FIREWALLS AND THE PIMPL IDIOM.

Item 26: Minimizing Compile-time Dependencies-Part 1.

Item 27: Minimizing Compile-time Dependencies-Part 2.

Item 28: Minimizing Compile-time Dependencies-Part 3.

Item 29: Compilation Firewalls.

Item 30: The “Fast Pimpl” Idiom.

NAME LOOKUP, NAMESPACES, AND THE INTERFACE PRINCIPLE.

Item 31: Name Lookup and the Interface Principle-Part 1.

Item 32: Name Lookup and the Interface Principle-Part 2.

Item 33: Name Lookup and the Interface Principle-Part 3.

Item 34: Name Lookup and the Interface Principle-Part 4.

MEMORY MANAGEMENT.

Item 35: Memory Management-Part 1.

Item 36: Memory Management-Part 2.

Item 37: auto_ptr.

TRAPS, PITFALLS, AND ANIT-IDIOMS.

Item 38: Object Identity.

Item 39: Automatic Conversions.

Item 40: Object Lifetimes-Part 1.

Item 41: Object Lifetimes-Part 2.

MISCELLANEOUS TOPICS.

Item 42: Variable Initialization—Or Is It?

Item 43: Const-Correctness.

Item 44: Casts.

Item 45: bool.

Item 46: Forwarding Functions.

Item 47: Control Flow.

Afterword.

Bibliography.

亚马逊链接

基本信息

名称: 深度探索C++对象模型
作者信息: 作者: Lippman [ 中文 pdf ]

简单介绍

《深度探索C++对象模型》重点探索了“面向对象程序所支持的C++对象模型”下的程序行为,对于“面向对象性质的基础实现技术”以及“各种性质背后的隐含利益交换”提供了一个清楚的认识,检验了由程序变形所带来的效率冲击,提供了丰富的程序范例、图片,以及面向对象观念和底层对象模型之间的效率测量。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
本立道生(侯捷 译序)
目录
前言(Stanley B.Lippman)

第0章 导读(译者的话)

第1章 关于对象(Object Lessons)

加上封装后的布局成本(Layout Costs for Adding Encapsulation) 1.1 C++模式模式(The C++ Object Model) 简单对象模型(A Simple Object Model) 表格驱动对象模型(A Table-driven Object Model) C++对象模型(The C++ Object Model) 对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically Correct Struct) 1.3 对象的差异(An Object Distinction) 指针的类型(The Type of a Pointer) 加上多态之后(Adding Polymorphism)

第2章 构造函数语意学(The Semantics of constructors)

2.1 Default Constructor的建构操作 “带有Default Constructor”的Member Class Object “带有Default Constructor”的Base Class “带有一个Virual Function”的Class “带有一个virual Base class”的Class 总结 2.2 Copy Constructor的建构操作 Default Memberwise Initialization Bitwise Copy Semantics(位逐次拷贝) 不要Bitwise Copy Semantics! 重新设定的指针Virtual Table 处理Virtual Base Class Subobject 2.3程序转换语意学(Program Transformation Semantics) 明确的初始化操作(Explicit Initialization) 参数的初始化(Argument Initialization) 返回值的初始化(Return Value Initialization) 在使用者层面做优化(Optimization at the user Level) 在编译器层面做优化(Optimization at the Compiler Level) Copy Constructor:要还是不要? 摘要 2.4 成员们的初始化队伍(Member Initialization List)

第3章 Data语意学(The Semantics of Data)

3.1 Data Member的绑定(The Binding of a Data Member) 3.2 Data Member的布局(Data Member Layout) 3.3 Data Member的存取 Static Data Members Nonstatic Data Member 3.4 “继承”与Data Member 只要继承不要多态(Inheritance without Polymorphism) 加上多态(Adding Polymorphism) 多重继承(Multiple Inheritance) 虚拟继承(Virtual Inheritance) 3.5 对象成员的效率(Object Member Efficiency) 3.6 指向Data Members的指针(Pointer to Data Members) “指向Members的指针”的效率问题

第4章 Function语意学(The Semantics of Function)

4.1 Member的各种调用方式 Nonstatic Member Functions(非静态成员函数) Virtual Member Functions(虚拟成员函数) Static Member Functions(静态成员函数) 4.2 Virtual Member Functions(虚拟成员函数) 多重继承下的Virtual Functions 虚拟继承下的Virtual Functions 4.3 函数的效能 4.4 指向Member Functions的指针(Pointer-to-Member Functions) 支持“指向Virtual Member Functions”之指针 在多重继承之下,指向Member Functions的指针 “指向Member Functions之指针”的效率 4.5 Inline Functions 形式对数(Formal Arguments) 局部变量(Local Variables)

第5章 构造、解构、拷贝 语意学(Semantics of Construction,Destruction,and Copy)

纯虚拟函数的存在(Presence of a Pure Virtual Function) 虚拟规格的存在(Presence of a Virtual Specification) 虚拟规格中const的存在 重新考虑class的声明 5.1 无继承情况下的对象构造 抽象数据类型(Abstract Data Type) 为继承做准备 5.2 继承体系下的对象构造 虚拟继承(Virtual Inheritance) 初始化语意学(The Semantics of the vptr Initialization) 5.3 对象复制语意学(Object Copy Semantics) 5.4 对象的功能(Object Efficiency) 5.5 解构语意学(Semantics of Destruction)

第6章 执行期语意学(Runting Semantics)

6.1 对象的构造和解构(Object Construction and Destruction) 全局对象(Global Objects) 局部静态对象(Local Static Objects) 对象数组(Array of Objects) Default Constructors和数组 6.2 new和delete运算符 针对数组的new语意 Placement Operator new的语意 6.3 临时性对象(Temporary Objects) 临时性对象的迷思(神话、传说)

第7章 站在对象模型的类端(On the Cusp of the Object Model)

7.1 Template Template的“具现”行为(Template Instantiation) Template的错误报告(Error Reporting within a Template) Template中的名称决议方式(Name Resolution within a Template) Member Function的具现行为(Member Function Instantiation) 7.2 异常处理(Exception Handling) Exception Handling快速检阅 对Exception Handling的支持 7.3 执行期类型识别(Runtime Type Identification,RTTI) Type-Safe Downcast(保证安全的向下转型操作) Type-Safe Dynamic Cast(保证安全的动态转型) References并不是Pointers Typeid运算符 7.4 效率有了,弹性呢? 动态共享函数库(Dynamic Shared Libraries) 共享内存(Shared Memory)

亚马逊链接

基本信息

名称: inside the c++ object model
作者信息: 作者: Stanley B. Lippman [ 英文 pdf ]

简单介绍

Inside the C++ Object Model focuses on the underlying mechanisms that support object-oriented programming within C++: constructor semantics, temporary generation, support for encapsulation, inheritance, and “the virtuals”–virtual functions and virtual inheritance. This book shows how your understanding the underlying implementation models can help you code more efficiently and with greater confidence. Lippman dispells the misinformation and myths about the overhead and complexity associated with C++, while pointing out areas in which costs and trade offs, sometimes hidden, do exist. He then explains how the various implementation models arose, points out areas in which they are likely to evolve, and why they are what they are. He covers the semantic implications of the C++ object model and how that model affects your programs. Highlights Explores the program behavior implicit in the C++ Object Model’s support of object-oriented programming. *Explains the basic implementation of the object-oriented features and the trade offs implicit in those features. *Examines the impact on performance in terms of program transformation. Provides abundant program examples, diagrams, and performance measurements to relate object-oriented concepts to the underlying object model.

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Chapter 1. Object Lessons
Layout Costs for Adding Encapsulation
Section 1.1. The C++ Object Model
Section 1.2. A Keyword Distinction
Section 1.3. An Object Distinction
Chapter 2. The Semantics of Constructors
Section 2.1. Default Constructor Construction
Section 2.2. Copy Constructor Construction
Section 2.3. Program Transformation Semantics
Section 2.4. Member Initialization List
Chapter 3. The Semantics of Data
Section 3.1. The Binding of a Data Member
Section 3.2. Data Member Layout
Section 3.3. Access of a Data Member
Section 3.4. Inheritance and the Data Member
Section 3.5. Object Member Efficiency
Section 3.6. Pointer to Data Members
Chapter 4. The Semantics of Function
Section 4.1. Varieties of Member Invocation
Section 4.2. Virtual Member Functions
Section 4.3. Function Efficiency
Section 4.4. Pointer-to-Member Functions
Section 4.5. Inline Functions
Chapter 5. Semantics of Construction, Destruction, and Copy
Presence of a Pure Virtual Destructor
Presence of a Virtual Specification
Presence of const within a Virtual Specification
A Reconsidered Class Declaration
Section 5.1. Object Construction without Inheritance
Section 5.2. Object Construction under Inheritance
Section 5.3. Object Copy Semantics
Section 5.4. Object Efficiency
Section 5.5. Semantics of Destruction
Chapter 6. Runtime Semantics
Section 6.1. Object Construction and Destruction
Section 6.2. Operators new and delete
Section 6.3. Temporary Objects
Chapter 7. On the Cusp of the Object Model
Section 7.1. Templates
Section 7.2. Exception Handling
Section 7.3. Runtime Type Identification
Section 7.4. Efficient, but Inflexible?

亚马逊链接

基本信息

名称: C++设计新思维
作者信息: 作者: Alexandrescu [ 中文 pdf ]

简单介绍

本书从根本上展示了generic patterns(泛型模式)或pattern templates(模式模板),并将它们视之为“在C 中创造可扩充设计”的一种功能强大的新方法。这种方法结合了template和patterns,你可能未曾想过,但的确存在。为C 打开了全新视野,而且不仅仅在编程方面,还在于软件设计本身;对软件分析和软件体系结构来说,它也具有丰富的内涵。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
译序by 侯捷 i
译序by 於春景 iii
目录 v
序言by scott meyers xi
序言by john vlissides xv
前言 xvii
致谢 xxi
第一篇 技术(techniques) 1
第1章 基于policy的class设计(policy-based class design) 3
1.1 软件设计的多样性(multiplicity) 3
1.2 全功能型(do-it-all)接口的失败 4
1.3 多重继承(multiple inheritance)是救世主? 5
1.4 templates带来曙光 6
1.5 policies和policy classes 7
1.6 更丰富的policies 12
1.7 policy classes的析构函数(destructors) 12
1.8 通过不完全具现化(incomplete instantiation)而获得的选择性机能(optional functionality) 13
1.9 结合policy classes 14
. 1.10 以policy classes定制结构 16
1.11 policies的兼容性 17
1.12 将一个class分解为一堆policies 19
1.13 摘要 20
第2章 技术(techniques) 23
2.1 编译期(compile-time)assertions 23
2.2 partial template specialization(模板偏特化) 26
2.3 局部类(local classes) 28
2.4 常整数映射为型别(mapping integral constants to types) 29
2.5 型别对型别的映射(type-to-type mapping) 31
2.6 型别选择(type selection) 33
2.7 编译期间侦测可转换性(convertibility)和继承性(inheritance) 34
2.8 type_info的一个外覆类(wrapper) 37
2.9 nulltype和emptytype 39
2.10 type traits 40
2.11 摘要 46
第3章 typelists 49
3.1 typelists的必要性 49
3.2 定义typelists 51
3.3 将typelist的生成线性化(linearizing) 52
3.4 计算长度 53
3.5 间奏曲 54
3.6 索引式访问(indexed access) 55
3.7 查找typelists 56
3.8 附加元素至typelists 57
3.9 移除typelist中的某个元素 58
3.10 移除重复元素(erasing duplicates)59
3.11 取代typelist中的某个元素 60
3.12 为typelists局部更换次序(partially ordering) 61
3.13 运用typelists自动产生classes 64
3.14 摘要 74
3.15 typelist要点概览 75
第4章 小型对象分配技术(small-object allocation) 77
4.1 缺省的free store分配器 78
4.2 内存分配器的工作方式 78
4.3 小型对象分配器(small-object allocator) 80
4.4 chunks(大块内存) 81
4.5 大小一致(fixed-size)的分配器 84
4.6 smallobjallocator class 87
4.7 帽子下的戏法 89
4.8 简单,复杂,终究还是简单 92
4.9 使用细节 93
4.10 摘要 94
4.11 小型对象分配器(small-object allocator)要点概览 94
第二篇 组件(components) 97
第5章 泛化仿函数(generalized functors) 99
5.1 command设计模式 100
5.2 真实世界中的command 102
5.3 c++ 中的可呼叫体(callable entities) 103
5.4 functor class template骨干 104
5.5 实现“转发式”(forwarding)functor::operator() 108
5.6 处理仿函数 110
5.7 做一个,送一个 112
5.8 引数(argument)和返回型别(return type)的转换 114
5.9 处理pointer to member function(成员函数指针) 115
5.10 绑定(binding) 119
5.11 将请求串接起来(chaining requests) 122
5.12 现实世界中的问题之1:转发式函数的成本 122
5.13 现实世界中的问题之2:heap分配 124
5.14 通过functor实现undo和redo 125
5.15 摘要 126
5.16 functor要点概览 126
第6章 singletons(单件)实现技术 129
6.1 静态数据 + 静态函数 != singleton 130
6.2 用以支持singleton的一些c++ 基本手法 131
6.3 实施“singleton的唯一性” 132
6.4 摧毁singleton 133
6.5 dead(失效的)reference问题 135
6.6 解决dead reference问题(i):phoenix singleton 137
6.7 解决dead reference问题(ii):带寿命的singletons 139
6.8 实现“带寿命的singletons” 142
6.9 生活在多线程世界 145
6.10 将一切组装起来 148
6.11 使用singletonholder 153
6.12 摘要 155
6.13 singletonholder class template要点概览 155
第7章 smart pointers(智能指针) 157
7.1 smart pointers基础 157
7.2 交易 158
7.3 smart pointers的存储 160
7.4 smart pointer的成员函数 161
7.5 拥有权(ownership)管理策略 163
7.6 address-of(取址)操作符 170
7.7 隐式转换(implicit conversion)至原始指针型别 171
7.8 相等性(equality)和不等性(inequality) 173
7.9 次序比较(ordering comparisons) 178
7.10 检测及错误报告(checking and error reporting) 181
7.11 smart pointers to const和const smart pointers 182
7.12 arrays 183
7.13 smart pointers和多线程(multithreading) 184
7.14 将一切组装起来 187
7.15 摘要 194
7.16 smartptr要点概览194
第8章 object factories(对象工厂) 197
8.1 为什么需要object factories 198
8.2 object factories in c++:classes和objects 200
8.3 实现一个object factory 201
8.4 型别标识符(type identifiers) 206
8.5 泛化(generalization) 207
8.6 细节琐务 210
8.7 clone factories(克隆工厂、翻制工厂、复制工厂) 211
8.8 通过其他泛型组件来使用object factories 215
8.9 摘要 216
8.10 factory class template要点概览 216
8.11 clonefactory class template要点概览 217
第9章 abstract factory(抽象工厂) 219
9.1 abstract factory扮演的体系结构角色(architectural role) 219
9.2 一个泛化的abstract factory接口 223
9.3 实作出abstractfactory 226
9.4 一个prototype-based abstract factory实作品 228
9.5 摘要 233
9.6 abstractfactory和concretefactory要点概览 233
第10章 visitor(访问者、视察者) 235
10.1 visitor 基本原理 235
10.2 重载(overloading):catch-all函数 242
10.3 一份更加精炼的实作品:acyclic visitor 243
10.4 visitor之泛型实作 248
10.5 再论 “cyclic” visitor 255
10.6 变化手段 258
10.7 摘要 260
10.8 visitor泛型组件要点概览 261
第11章 multimethods 263
11.1 什么是multimethods? 264
11.2 何时需要multimethods? 264
11.3 double switch-on-type:暴力法 265
11.4 将暴力法自动化 268
11.5 暴力式dispatcher 的对称性 273
11.6 对数型(logarithmic)double dispatcher 276
11.7 fndispatcher 和对称性 282
11.8 double dispatch(双重分派)至仿函数(functors) 282
11.9 引数的转型:static_cast或dynamic_cast? 285
11.10 常数时间的multimethods:原始速度(raw speed) 290
11.11 将basicdispatcher 和basicfastdispatcher当做policies 293
11.12 展望 294
11.13 摘要 296
11.14 double dispatcher要点概览 297
附录 一个超迷你的多线程程序库(a minimalist multithreading library) 301
a.1 多线程的反思 302
a.2 loki的作法 303
a.3 整数型别上的原子操作(atomic operations) 303
a.4 mutexes(互斥器) 305
a.5 面向对象编程中的锁定语意(locking semantics) 306
a.6 可有可无的(optional)volatile标识符 308
a.7 semaphores, events和其他好东西 309
a.8 摘要 309
参考书目(bibliography) 311
索引(index) 313

亚马逊链接

基本信息

名称: More Effective C++
作者信息: 作者: Scott Meyers [ 中文 pdf ]

简单介绍

《More Effective C++:35个改善编程与设计的有效方法(中文版)》内容简介:继Effective C++之后,Scott Meyers于1996推出这本《More Effective C++(35个改善编程与设计的有效方法)》“续集”。条款变得比较少,页数倒是多了一些,原因是这次选材比“第一集”更高阶,尤其是第5章。Meyers将此章命名为技术(techniques),并明白告诉你,其中都是一些patterns,例如virtual constructors,smart pointers,reference counting,proxy classes,double dispatching……这一章的每个条款篇幅都达15-30 页之多,实在让人有“山重水复疑无路,柳暗花明又一村”之叹。
虽然出版年代稍嫌久远,但《More Effective C++》并没有第2版,原因是当其出版之时(1996),C++ Standard已经几乎定案,《More Effective C++:35个改善编程与设计的有效方法(中文版)》即依当时的标准草案而写,其与现今的C++ 标准规范几乎相同。而且可能变化的几个弹性之处,Meyers也都有所说明与提示。读者可以登录作者提供的网址,看看上下两集的勘误与讨论(数量之多,令人惊恐。幸好多是技术讨论或文字斟酌,并没有什么重大误失)。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
译序(侯捷)
导读(Introduction)
基础议题(Basics)
 条款1:仔细区别 pointers 和 references
 Distinguish between pointers and references.
 条款2:最好使用 C++ 转型操作符
 Prefer C++-style casts.
 条款3:绝对不要以多态(polymorphically)方式处理数组
 Never treat arrays polymorphically.
 条款4:非必要不提供 default constructor
 Avoid gratuitous default constructors.
操作符(Operators)
 条款5:对定制的“类型转换函数”保持警觉
 Be wary of user-defined conversion functions.
 条款6:区别 increment/decrement 操作符的
 前置(prefix)和后置(postfix)形式
 Distinguish between prefix and postfix forms of increment
 and decrement operators.
 条款7:千万不要重载&&,||和, 操作符
 Never overload &&, ||, or ,.
 条款8:了解各种不同意义的 new 和 delete
 Understand the different meanings of new and delete
异常(Exceptions)
 条款9:利用 destructors 避免泄漏资源
 Use destructors to prevent resource leaks.
 条款10:在 constructors 内阻止资源泄漏(resource leak)
 Prevent resource leaks in constructors.
 条款11:禁止异常(exceptions)流出 destructors 之外
 Prevent exceptions from leaving destructors.
 条款12:了解“抛出一个 exception”与“传递一个参数”
 或“调用一个虚函数”之间的差异61
 Understand how throwing an exception differs from
 passing a parameter or calling a virtual function.
 条款13:以 by reference 方式捕捉 exceptions
 Catch exceptions by reference.
 条款14:明智运用 exception specifications
 Use exception specifications judiciously.
 条款15:了解异常处理(exception handling)的成本
 Understand the costs of exception handling.
效率(Efficiency)
 条款16:谨记 80-20 法则
 Remember the 80-20 rule.
 条款17:考虑使用 lazy evaluation(缓式评估)
 Consider using lazy evaluation.
 条款18:分期摊还预期的计算成本
 Amortize the cost of expected computations.
 条款19:了解临时对象的来源
 Understand the origin of temporary objects.
 条款20:协助完成“返回值优化(RVO)”
 Facilitate the return value optimization.
 条款21:利用重载技术(overload)避免隐式类型转换(implict type conversions)
 Overload to avoid implicit type conversions.
 条款22:考虑以操作符复合形式(op=)取代其独身形式(op)
 Consider using op= instead of stand-alone op.
 条款23:考虑使用其他程序库
 Consider alternative libraries.
 条款24:了解 virtual functions、multiple inheritance、virtual baseclasses、
 runtime type identification 的成本
 Understand the costs of virtual functions, multipleinheritance,
 virtual base classes, and RTTI.
技术(Techniques, Idioms, Patterns)
杂项讨论(Miscellany)
索引(一)(General Index)
索引(二)(Index of Example Classes,Functions,and Templtes)

亚马逊链接

基本信息

名称: More Exceptional C++(英文)
作者信息: 作者: Herb Sutter [ 英文 pdf ]

简单介绍

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Generic Programming and the C++ Standard Library.
Item 1: Switching Streams (2 / 10).
Item 2: Predicates,
Part 1: What remove() Removes (4 / 10).
Item 3: Predicates, Part 2: Matters of State (7 / 10).
Item 4: Extensible Templates: Via Inheritance or Traits? (7 / 10).
Item 5: Typename (7 / 10).
Item 6: Containers, Pointers, and Containers That Aren’t (5 / 10).
Item 7: Using Vector and Deque (3 / 10).
Item 8: Using Set and Map (5 / 10).
Item 9: Equivalent Code? (5 / 10).
Item 10: Template Specialization and Overloading (6 / 10).
Item 11: Mastermind (8 / 10).

Optimization and Performance. Item 12: Inline (4 / 10). Item 13: Lazy Optimization, Part 1: A Plain Old String (2 / 10). Item 14: Lazy Optimization, Part 2: Introducing Laziness (3 / 10). Item 15: Lazy Optimization, Part 3: Iterators and References (6 / 10). Item 16: Lazy Optimization, Part 4: Multi-Threaded Environments (8 / 10).

Exception Safety Issues and Techniques. Item 17: Constructor Failures, Part 1: Object Lifetimes (4 / 10). Item 18: Constructor Failures, Part 2: Absorption? (7 / 10). Item 19: Uncaught Exceptions (6 / 10). Item 20: An Unmanaged Pointer Problem, Part 1: Parameter Evaluation (6 / 10). Item 21: An Unmanaged Pointer Problem, Part 2: What About auto_ptr? (8 / 10). Item 22: Exception-Safe Class Design, Part 1: Copy Assignment (7 / 10). Item 23: Exception-Safe Class Design, Part 2: Inheritance (6 / 10).

Inheritance and Polymorphism. Item 24: Why Multiple Inheritance? (6 / 10). Item 25: Emulating Multiple Inheritance (5 / 10). Item 26: Multiple Inheritance and the Siamese Twin Problem (4 / 10).Item 27: (Im)pure Virtual Functions (7 / 10). Item 28: Controlled Polymorphism (3 / 10).

Memory and Resource Management. Item 29: Using auto_ptr (5 / 10). Item 30: Smart Pointer Members, Part 1: A Problem with auto_ptr (5 / 10). Item 31: Smart Pointer Members, Part 2: Toward a ValuePtr (6 / 10).

Free Functions and Macros. Item 32: Recursive Declarations (6 / 10). Item 33: Simulating Nested Functions (5 / 10). Item 34: Preprocessor Macros (4 / 10). Item 35: #Definition (4 / 10).

Miscellaneous Topics. Item 36: Initialization (3 / 10). Item 37: Forward Declarations (3 / 10). Item 38: Typedef (3 / 10). Item 39: Namespaces, Part 1: Using-Declarations and Using-Directives (2 / 10). Item 40: Namespaces, Part 2: Migrating to Namespaces (4 / 10).

Afterword.

Appendixes,

Appendix A. Optimizations That Aren’t (In a Multithreaded World).

Appendix B. Test Results for Single- versus Multi-Thread-Safe String Implementations.

Bibliography.

亚马逊链接

基本信息

名称: C++程序设计原理与实践
作者信息: 作者: Bjarne Stroustrup [ 中文 pdf ]

简单介绍

本书是经典程序设计思想与C++开发实践的完美结合,是C++之父回归校园后对C++编程原理和技巧的全新阐述。书中全面地介绍了程序设计基本原理,包括基本概念、设计和编程技术、语言特性以及标准库等,教你学会如何编写具有输入、输出、计算以及简单图形显示等功能的程序。此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现了一幅程序设计的全景图。
·C++初学者的权威指南。无论你是从事软件开发还是其他领域的工作,本书将为你打开程序开发之门。
·中高级程序员的必备参考。通过观察程序设计大师如何处理编程中的各种问题,使你获得新的领悟和指引。
·全面阐释C++基本概念和技术。与传统的C++教材相比,本书对基本概念和技术的介绍更为深入,为你编写实用、正确、易维护和有效的代码打下坚实的基础。
·强调现代C++编程风格。本书从开篇就介绍现代C++程序设计技术,并揭示了大量关于如何使用C++标准库来简化程序设计的原理,使你快速掌握实用编成技巧。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
出版者的话
译者序
前言
第0章 致读者
0.1 本书结构
0.2 讲授和学习本书的方法
0.3 程序设计和计算机科学
0.4 创造性和问题求解
0.5 反馈方法
0.6 参考文献
0.7 作者简介
第1章 计算机、人与程序设计
1.1 介绍
1.2 软件
1.3 人
1.4 计算机科学
1.5 计算机已无处不在
1.6 程序员的理想
第一部分 基本知识
第2章 Hello,World!
2.1 程序
2.2 经典的第一个程序
2.3 编译
2.4 链接
2.5 编程环境
第3章 对象、类型和值
3.1 输入
3.2 变量
3.3 输入和类型
3.4 运算和运算符
3.5 赋值和初始化
3.6 组合赋值运算符
3.7 命名
3.8 类型和对象
3.9 类型安全
第4章 计算
4.1 计算
4.2 目标和工具
4.3 表达式
4.4 语句
4.5 函数
4.6 向量
4.7 语言特性
第5章 错误
5.1 介绍
5.2 错误的来源
5.3 编译时错误
5.4 连接时错误
5.5 运行时错误
5.6 异常
5.7 逻辑错误
5.8 估计
5.9 调试
5.10 前置条件和后置条件
5.11 测试
第6章 编写一个程序
6.1 一个问题
6.2 对问题的思考
6.3 回到计算器问题
6.4 文法
6.5 将文法转换为程序
6.6 试验第一个版本
6.7 试验第二个版本
6.8 单词流
6.9 程序结构
第7章 完成一个程序
7.1 介绍
7.2 输入和输出
7.3 错误处理
7.4 处理负数
7.5 模运算:%
7.6 清理代码
7.7 错误恢复
7.8 变量
第8章 函数相关的技术细节
8.1 技术细节
8.2 声明和定义
8.3 头文件
8.4 作用域
8.5 函数调用和返回
8.6 求值顺序
8.7 名字空间
第9章 类相关的技术细节
9.1 用户自定义类型
9.2 类和成员
9.3 接口和实现
9.4 演化一个类
9.5 枚举类型
9.6 运算符重载
9.7 类接口
9.8 Date类
第二部分 输入和输出
第10章 输入/输出流
第11章 定制输入/输出
第12章 一个显示模型
第13章 图形类
第14章 设计图形类
第15章 绘制函数图和数据图
第16章 图形用户界面
第三部分 数据结构和算法
第17章 向量和自由空间
第18章 向量和数组
第19章 向量、模板和异常
第20章 容器和迭代器
第21章 算法和映射
第四部分 拓宽视野
第22章 理念和历史
第23章 文本处理
第24章 数值计算
第25章 嵌入式系统程序设计
第26章 测试
第27章 C语言
术语表
参考书目
第五部分 附录?
附录A C++语言概要
附录B 标准库概要
附录C Visual Studio简要入门教程
附录D 安装FLTK
附录E GUI实现

亚马逊链接

基本信息

名称: Clojure程序设计(英文)
作者信息: 作者: 哈罗威 [ 英文 epub ]

简单介绍

《Clojure程序设计》是介绍Clojure的经典之作。它完全覆盖了Clojure 1.3版本提供的新特性,而且为了体现Clojure新生概念的重要意义,作者重新组织和编写了一些章节。两位作者通过《Clojure程序设计》展示了如何从头构建一个应用,帮助读者充分了解Clojure程序的完整开发流程,还帮助读者运用Clojure思想为问题的各个部分找出解决方案。
通过阅读《Clojure程序设计》,你能够学会运用Clojure的方式进行思考,充分利用这门语言的优势,快速构建强大的程序。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
第1章启航1
1.1为什么是Clojure2
1.1.1Clojure非常优雅2
1.1.2Clojure是Lisp的再度崛起5
1.1.3为什么是Lisp5
1.1.4它是Lisp,但括号少了6
1.1.5Clojure是函数式语言8
1.1.6Clojure简化了并发编程9
1.1.7Clojure与Java虚拟机彼此亲密无间10
1.2Clojure编程快速入门11
1.2.1使用REPL12
1.2.2特殊变量13
1.2.3添加共享状态14
1.3探索Clojure的程序库16
1.3.1require和use17
1.3.2查找文档18
1.4小结20
第2章探索Clojure21
2.1形式21
2.1.1使用数值类型22
2.1.2符号24
2.1.3字符串与字符25
2.1.4布尔值与nil27
2.1.5映射表、关键字和记录28
2.2读取器宏30
2.3函数32
2.3.1匿名函数34
2.3.2何时使用匿名函数36
2.4变量、绑定和命名空间36
2.4.1绑定37
2.4.2解构38
2.4.3命名空间40
2.5调用Java43
2.5.1访问构造函数、方法和字段43
2.5.2Javadoc45
2.6流程控制45
2.6.1分支结构与if45
2.6.2用do引入副作用46
2.6.3循环与loop/recur47
2.7我的for循环哪儿去了48
2.8元数据52
2.9小结53
第3章一切皆序列55
3.1一切皆序列56
3.2使用序列库61
3.2.1创建序列61
3.2.2过滤序列64
3.2.3序列谓词65
3.2.4序列转换66
3.3惰性和无限序列69
3.4Java亦可序化71
3.4.1序化Java容器71
3.4.2序化正则表达式73
3.4.3序化文件系统74
3.4.4序化流75
3.4.5序化XML76
3.5调用特定于结构的函数77
3.5.1列表函数77
3.5.2向量函数78
3.5.3映射表函数79
3.5.4集合函数82
3.6小结85
第4章函数式编程86
4.1函数式编程理念86
4.1.1纯函数87
4.1.2持久性数据结构87
4.1.3惰性和递归88
4.1.4引用透明性89
4.1.5FP的优势89
4.1.66条规则90
4.2怎样偷个懒91
4.2.1尾递归92
4.2.2自递归与recur94
4.2.3惰性序列95
4.2.4聊聊变现97
4.2.5丢弃头元素98
4.3懒上加懒99
4.4再议递归105
4.4.1转换为自递归106
4.4.2采用Trampolining技术107
4.4.3用惰性化替代递归109
4.4.4用快存为递归抄条近路112
4.5小结114
第5章状态115
5.1并发、并行和锁定116
5.2引用与软事务内存117
5.2.1ref—set118
5.2.2事务的属性118
5.2.3alter119
5.2.4STM的工作原理:MVCC120
5.2.5commute121
5.2.6alter优先122
5.2.7为引用添加验证123
5.3使用原子进行非协同、同步的更新124
5.4使用代理进行异步更新125
5.4.1代理的验证与错误处理126
5.4.2在事务中包含代理127
5.4.3统一的更新模型129
5.5用变量管理线程内状态129
5.5.1远距离作用131
5.5.2用于Java回调API132
5.6Clojure贪吃蛇134
5.6.1函数式模型135
5.6.2使用STM建立可变模型139
5.6.3贪吃蛇的GUI140
5.6.4没有引用的贪吃蛇143
5.7小结144
第6章协议和数据类型145
6.1针对抽象编程145
6.2接口148
6.3协议149
6.4数据类型153
6.5记录158
6.6具体化164
6.7小结165
第7章宏166
7.1何时使用宏166
7.2编写流程控制宏167
7.2.1特殊形式、设计模式和宏169
7.2.2宏展开170
7.2.3when与when—not172
7.3让宏更加简单173
7.3.1语法引述、解引述和解引述拼接175
7.3.2在宏内部创建名称176
7.4宏的分类178
7.4.1有条件的求值180
7.4.2创建变量181
7.4.3Java互操作183
7.4.4延迟求值184
7.4.5对求值进行包装184
7.4.6避免Lambda表达式186
7.5小结187
第8章多重方法188
8.1没有多重方法的日子188
8.2定义多重方法190
8.2.1调度是继承感知的192
8.2.2多重方法的默认值192
8.3调度不简单193
8.4创建特设分类法195
8.5何时应该使用多重方法199
8.5.1Inspector200
8.5.2clojure.test201
8.5.3反例202
8.6小结203
第9章极尽Java之所能204
9.1异常处理205
9.1.1保持简单的异常处理205
9.1.2清理资源206
9.1.3响应异常207
9.2与整数搏斗209
9.3性能优化210
9.3.1使用基本类型提升性能210
9.3.2添加类型提示213
9.4在Clojure中创建Java类215
9.4.1创建Java代理215
9.4.2使用Java容器217
9.5真实世界的例子220
9.5.1真正的持续循环222
9.5.2日志224
9.5.3配置226
9.6小结227
第10章搭建应用228
10.1为电码译员游戏计分229
10.2测试计分器232
10.2.1手工构造输入233
10.2.2运行测试234
10.2.3验证输出235
10.2.4回归测试236
10.3test.generative237
10.3.1生成数据237
10.3.2程序化验证238
10.3.3defspec240
10.3.4运行测试241
10.3.5规格执行失败时242
10.3.6计分函数的产生式测试243
10.4创建用户界面244
10.4.1该是时候处理状态了245
10.4.2玩家界面246
10.5部署代码249
10.5.1Procfile250
10.5.2Heroku库250
10.5.3Git251
10.5.4安置你的应用251
10.5.5部署252
10.6小结252
附录编辑器254
参考书目255

亚马逊链接

基本信息

名称: Real-Time C++
作者信息: 作者: Michael Kormanyos [ 英文 pdf ]

简单介绍

With this book, Chris Kormanyos delivers a highly practical guide to programming real-time embedded microcontroller systems in C++. It is divided into three parts plus several appendices. Part I provides a foundation for real-time C++ by covering language technologies, including object-oriented methods, template programming and optimization. Next, part II presents detailed descriptions of a variety of C++ components that are widely used in microcontroller programming. It details some of C++’s most powerful language elements, such as class types, templates and the STL, to develop components for microcontroller register access, low-level drivers, custom memory management, embedded containers, multitasking, etc. Finally, part III describes mathematical methods and generic utilities that can be employed to solve recurring problems in real-time C++. The appendices include a brief C++ language tutorial, information on the real-time C++ development environment and instructions for building GNU GCC cross-compilers and a microcontroller circuit.

目录

1
2


亚马逊链接

基本信息

名称: C++沉思录
作者信息: 作者: Andrew Koenig [ 中文 pdf ]

简单介绍

C和C++经典著作•C++沉思录:Ruminations on C++》分为6篇32章,分别对C++语言的历史和特点、类和继承、STL与泛型编程、库的设计等几大技术话题进行了详细而深入的讨论,细微之处几乎涵盖了C++所有的设计思想和技术细节。全书通过精心挑选的实例,向读者传达先进的程序设计的方法和理念

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
第0章 序幕
第一篇 动机
第1章 为什么我用C++
第2章 为什么用C++工作
第3章 生活在现实世界中

第二篇 类和继承 第4章 类设计者的核查表 第5章 代理类 第6章 句柄:第一部分 第7章 句柄:第二部分 第8章 一个面向对象程序范例 第9章 一个课堂练习的分析(上) 第10章 一个课堂练习的分析(下) 第11章 什么时候不应当使用虚函数

第三篇 模板 第12章 设计容器类 第13章 访问容器中的元素 第14章 迭代器 第15章 序列 第16章 作为接口的模板 第17章 模板和泛型算法 第18章 泛型迭代器 第19章 使用泛型迭代器 第20章 迭代器配接器 第21章 函数对象 第22章 函数配接器

第四篇 库 第23章 日常使用的库 第24章 一个库接口设计实例 第25章 库设计就是语言设计 第26章 语言设计就是库设计

第五篇 技术 第27章 自己跟踪自己的类 第28章 在簇中分配对象 第29章 应用器、操纵器和函数对象 第30章 将应用程序库从输入输出中分离出来

第六篇 总结 第31章 通过复杂性获取简单性 第32章 说了Hello world后再做什么 附录 Koenig和Moo夫妇访谈 索引

亚马逊链接