注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书科学技术计算机/网络软件与程序设计深度探索C++14

深度探索C++14

深度探索C++14

定 价:¥128.00

作 者: [德] Peter Gottschling(彼得・哥特史林) 著,吴野 译
出版社: 电子工业出版社
丛编项:
标 签: 暂缺

购买这本书可以去


ISBN: 9787121354984 出版时间: 2020-07-01 包装: 平装
开本: 16开 页数: 500 字数:  

内容简介

  本书从传统的Hello World开始,先介绍了语言入门C++所必须的基本要素(如表达式、语句、声明);再到和程序组织有关的函数、类;然后深入探讨了C++所支持的泛型编程、元编程和面向对象等不同编程范式,并且提供了很多的例子可以让读者仔细体会它们之间的联系、区别和适用场景;最后再以一个中型项目为例介绍了一些大型工程所必备的基础知识。本书适合C++初学者、正在开发和维护科学和工程软件的软件工程师,以及希望学习和理解现代C++机制如泛型编程和元编程的读者。

作者简介

  Peter Gottschling 热衷于编写前沿的科学计算软件,他希望他的热情也能感染读者。因为职业的缘故他编写了MTL4(矩阵模板库4),同时也是Boost Graph Library 的作者之一。他曾在多个C++ 课程和专业培训中分享过开发经验,并撰写了本书。译者吴野,线上常用ID“空明流转”。毕业后在数家IT企业工作过,拥有数年软件开发和硬件设计经验。C++为其常用编程语言之一,业余时间也会阅读一些C++标准和标准提案。

图书目录

第1章 C++基础(C++ Basics) 1
1.1 第一个程序(Our First Program) 1
1.2 变量(Variables) 4
1.2.1 常量(Constants) 7
1.2.2 字面量(Literals) 7
1.2.3 非窄化的初始化(non-narrowing initialization) 9
1.2.4 作用域(Scopes) 11
1.3 操作符(Operators) 13
1.3.1 算术操作符(Arithmetic Operators) 14
1.3.2 布尔操作符(Boolean Operators) 17
1.3.3 位操作符(Bitwise Operators) 18
1.3.4 赋值(Assignment) 19
1.3.5 程序流(Program Flow) 19
1.3.6 内存处理(Memory Handling) 20
1.3.7 访问操作符(Access Operators) 21
1.3.8 类型处理(Type Handling) 21
1.3.9 错误处理(Error Handling) 21
1.3.10 重载(Overloading) 22
1.3.11 操作符优先级(Operator Precedence) 22
1.3.12 避免副作用(Avoid Side Effects!) 22
1.4 表达式和语句(Expressions and Statements) 25
1.4.1 表达式(Expressions) 25
1.4.2 语句(Statements) 26
1.4.3 分支(Branching) 27
1.4.4 循环(Loops) 29
1.4.5 goto 33
1.5 函数(Functions) 33
1.5.1 参数(Arguments) 34
1.5.2 返回结果(Returning Results) 36
1.5.3 内联(Inlining) 37
1.5.4 重载(Overloading) 38
1.5.5 main函数(main Function) 40
1.6 错误处理(Error Handling) 41
1.6.1 断言(Assertions) 41
1.6.2 异常(Exceptions) 43
1.6.3 静态断言(Static Assertions) 48
1.7 I/O 48
1.7.1 标准输出(Standard Output) 48
1.7.2 标准输入(Standard Input) 49
1.7.3 文件的输入和输出(Input/Output with Files) 49
1.7.4 泛化的流概念(Generic Stream Concept) 50
1.7.5 格式化(Formatting) 51
1.7.6 处理输入输出错误(Dealing with I/O Errors) 53
1.8 数组、指针和引用(Arrays, Pointers, and References) 56
1.8.1 数组(Arrays) 56
1.8.2 指针(Pointers) 58
1.8.3 智能指针(Smart Pointers) 62
1.8.4 引用(References) 65
1.8.5 指针和引用的比较(Comparison between Pointers and References) 66
1.8.6 不要引用过期数据(Do Not Refer to Outdated Data!) 67
1.8.7 数组的容器(Containers for Arrays) 67
1.9 软件项目结构化(Structuring Software Projects) 70
1.9.1 注释(Comments) 70
1.9.2 预编译指示字(Preprocessor Directives) 71
1.10 练习(Exercises) 75
1.10.1 年龄(Age) 75
1.10.2 数组和指针(Arrays and Pointers) 76
1.10.3 读取一个矩阵市场文件的头部(Read the Header of a Matrix
Market File) 76
第2章 类(Classes) 77
2.1 为普遍意义而不是技术细节编程(Program for Universal Meaning Not for
Technical Details) 77
2.2 成员(Members) 79
2.2.1 成员变量(Member Variables) 80
2.2.2 可访问性(Accessibility) 80
2.2.3 访问操作符(Access Operators) 83
2.2.4 类的静态声明符(The Static Declarator for Classes) 84
2.2.5 成员函数(Member Functions) 84
2.3 设置值:构造函数和赋值(Setting Values: Constructors and Assignments) 85
2.3.1 构造函数(Constructors) 86
2.3.2 赋值(Assignment) 96
2.3.3 初始化器列表(Initializer Lists) 97
2.3.4 一致性初始化(Uniform Initialization) 99
2.3.5 移动语义(Move Semantic) 101
2.4 析构函数(Destructors) 105
2.4.1 实现准则(Implementation Rules) 105
2.4.2 适当处理资源(Dealing with Resources Properly) 106
2.5 自动生成方法清单(Method Generation Résumé) 112
2.6 成员变量访问(Accessing Member Variables) 113
2.6.1 访问函数(Access Functions) 113
2.6.2 下标操作符(Subscript Operator) 115
2.6.3 常量成员函数(Constant Member Functions) 116
2.6.4 引用限定的变量(Reference-Qualified Members) 117
2.7 操作符重载的设计(Operator Overloading Design) 118
2.7.1 保持一致!(Be Consistent!) 119
2.7.2 注意优先级(Respect the Priority) 120
2.7.3 成员函数和自由函数(Member or Free Function) 120
2.8 练习(Exercises) 123
2.8.1 多项式(Polynomial) 123
2.8.2 移动赋值(Move Assignment) 123
2.8.3 初始化器列表(Initializer List) 123
2.8.4 资源管理(Resource Rescue) 124
第3章 泛型编程(Generic Programming) 125
3.1 函数模板(Function Templates) 125
3.1.1 实例化(Instantiation) 127
3.1.2 参数类型的推导(Parameter Type Deduction) 128
3.1.3 在模板中处理错误(Dealing with Errors in Templates) 132
3.1.4 混合类型(Mixing Types) 133
3.1.5 一致性初始化(Uniform Initialization) 134
3.1.6 自动返回值类型(Automatic return Type) 134
3.2 命名空间与函数查找(Namespaces and Function Lookup) 135
3.2.1 命名空间(Namespaces) 135
3.2.2 参数相关查找(Argument-Dependent Lookup) 138
3.2.3 命名空间限定还是ADL(Namespace Qualification or ADL) 142
3.3 类模板(Class Templates) 144
3.3.1 一个容器的范例(A Container Example) 144
3.3.2 为类和函数设计统一的接口(Designing Uniform Class and
Function Interfaces) 146
3.4 类型推导与定义(Type Deduction and Definition) 153
3.4.1 自动变量类型(Automatic Variable Type) 153
3.4.2 表达式的类型(Type of an Expression) 154
3.4.3 decltype(auto) 155
3.4.4 定义类型(Defining Types) 156
3.5 关于模板的一点点理论:概念(A Bit of Theory on Templates: Concepts) 158
3.6 模板特化(Template Specialization) 159
3.6.1 为单个类型特化类(Specializing a Class for One Type) 159
3.6.2 函数特化和重载(Specializing and Overloading Functions) 162
3.6.3 部分特化(Partial Specialization) 164
3.6.4 函数的部分特化(Partially Specializing Functions) 165
3.7 模板的非类型参数(Non-Type Parameters for Templates) 168
3.8 仿函数(Functors) 170
3.8.1 类似函数的参数(Function-like Parameters) 172
3.8.2 组合仿函数(Composing Functors) 173
3.8.3 递归(Recursion) 175
3.8.4 泛型归纳函数(Generic Reduction) 179
3.9 匿名函数(Lambda) 180
3.9.1 捕获(Capture) 181
3.9.2 按值捕获(Capture by Value) 181
3.9.3 按引用捕获(Capture by Reference) 182
3.9.4 广义捕获(Generalized Capture) 184
3.9.5 泛型匿名函数(Generic Lambdas) 185
3.10 变参模板(Variadic Templates) 186
3.11 练习(Exercises) 188
3.11.1 字符串表示(String Representation) 188
3.11.2 元组的字符串表示(String Representation of Tuples) 188
3.11.3 泛型栈(Generic Stack) 188
3.11.4 向量的迭代器(Iterator of a Vector) 189
3.11.5 奇数迭代器(Odd Iterator) 189
3.11.6 奇数范围(Odd Range) 189
3.11.7 bool变量的栈(Stack of bool) 190
3.11.8 自定义大小的栈(Stack with Custom Size) 190
3.11.9 非类型模板参数的推导(Deducing Non-type Template Arguments) 190
3.11.10 梯形公式(Trapezoid Rule) 190
3.11.11 仿函数(Functor) 191
3.11.12 匿名函数(Lambda) 191
3.11.13 实现make_unique(Implement make_unique) 191
第4章 库(Libraries) 192
4.1 标准模板库(Standard Template Library) 193
4.1.1 入门示例(Introductory Example) 193
4.1.2 迭代器(Iterators) 194
4.1.3 容器(Containers) 199
4.1.4 算法(Algorithms) 208
4.1.5 超越迭代器(Beyond Iterators) 215
4.2 数值(Numerics) 216
4.2.1 复数(Complex Numbers) 217
4.2.2 随机数发生器(Random Number Generators) 220
4.3 元编程(Meta-programming) 230
4.3.1 极限(Limits) 230
4.3.2 类型特征(Type Traits) 232
4.4 支持库(Utilities) 234
4.4.1 元组(Tuple) 235
4.4.2 函数(function) 238
4.4.3 引用包装器(Reference Wrapper) 240
4.5 就是现在(The Time Is Now) 242
4.6 并发(Concurrency) 244
4.7 标准之外的科学计算程序库(Scientific Libraries Beyond the Standard) 248
4.7.1 其他算术运算库(Other Arithmetics) 248
4.7.2 区间算术(Interval Arithmetic) 248
4.7.3 线性代数(Linear Algebra) 249
4.7.4 常微分方程(Ordinary Differential Equations) 249
4.7.5 偏微分方程(Partial Differential Equations) 249
4.7.6 图论算法(Graph Algorithms) 250
4.8 练习(Exercises) 250
4.8.1 按模排序(Sorting by Magnitude) 250
4.8.2 STL容器(STL Container) 250
4.8.3 复数(Complex Numbers) 250
第5章 元编程(Meta-Programming) 252
5.1 让编译器进行计算(Let the Compiler Compute) 252
5.1.1 编译期函数(Compile-Time Functions) 253
5.1.2 扩展的编译期函数(Extended Compile-Time Functions) 255
5.1.3 质数(Primeness) 257
5.1.4 此常数?彼常数?(How Constant Are Our Constants?) 259
5.2 提供和使用类型信息(Providing and Using Type Information) 260
5.2.1 类型特征(Type Traits) 261
5.2.2 条件异常处理(Conditional Exception Handling) 264
5.2.3 一个const整洁视图的用例(A const-Clean View Example) 265
5.2.4 标准类型特征(Standard Type Traits) 272
5.2.5 领域特定的类型属性(Domain-Specific Type Properties) 272
5.2.6 enable_if 274
5.2.7 新版变参模板(Variadic Templates Revised) 278
5.3 表达式模板(Expression Templates) 281
5.3.1 一个简单的操作符实现(Simple Operator Implementation) 281
5.3.2 一个表达式模板类(An Expression Template Class) 285
5.3.3 泛化的表达式模板(Generic Expression Templates) 288
5.4 元优化:编写你自己的编译器优化(Meta-Tuning: Write Your Own Compiler Optimization) 290
5.4.1 经典的固定大小的循环展开(Classical Fixed-Size Unrolling) 292
5.4.2 嵌套展开(Nested Unrolling) 295
5.4.3 动态循环展开――热身(Dynamic Unrolling―Warm-up) 301
5.4.4 展开向量表达式(Unrolling Vector Expressions) 303
5.4.5 调优表达式模板(Tuning an Expression Template) 305
5.4.6 调优缩减运算(Tuning Reduction Operations) 308
5.4.7 调优嵌套循环(Tuning Nested Loops) 316
5.4.8 调优一览(Tuning Résumé) 322
5.5 练习(Exercises) 323
5.5.1 类型特征(Type Traits) 323
5.5.2 Fibonacci数列(Fibonacci Sequence) 323
5.5.3 元编程版的最大公约数(Meta-Program for Greatest Common Divisor) 323
5.5.4 向量表达式模板(Vector Expression Template) 324
5.5.5 元列表(Meta-List) 325
第6章 面向对象编程(Object-Oriented Programming) 326
6.1 基本原则(Basic Principles) 327
6.1.1 基类和派生类(Base and Derived Classes) 327
6.1.2 继承构造(Inheriting Constructors) 331
6.1.3 虚函数和多态类(Virtual Functions and Polymorphic Classes) 332
6.1.4 基于继承的仿函数(Functors via Inheritance) 338
6.2 消除冗余(Removing Redundancy) 339
6.3 多重继承(Multiple Inheritance) 340
6.3.1 多个父类(Multiple Parents) 340
6.3.2 公共祖父(Common Grandparents) 342
6.4 通过子类型进行动态选择(Dynamic Selection by Sub-typing) 347
6.5 转换(Conversion) 350
6.5.1 在基类和派生类之间转换(Casting between Base and Derived Classes) 351
6.5.2 const转换(const-Cast) 356
6.5.3 重解释转型(Reinterpretation Cast) 356
6.5.4 函数风格的转型(Function-Style Conversion) 357
6.5.5 隐式转换(Implicit Conversions) 359
6.6 CRTP 359
6.6.1 一个简单的例子(A Simple Example) 360
6.6.2 一个可复用的访问操作符(A Reusable Access Operator) 361
6.7 练习(Exercises) 364
6.7.1 无冗余的菱形继承(Non-redundant Diamond Shape) 364
6.7.2 继承向量类(Inheritance Vector Class) 364
6.7.3 克隆函数(Clone Function) 364
第7章 科学计算项目(Scientific Projects) 365
7.1 常微分方程解算器的实现(Implementation of ODE Solvers) 365
7.1.1 常微分方程(Ordinary Differential Equations) 366
7.1.2 龙格-库塔法(Runge-Kutta Algorithms) 368
7.1.3 泛型实现(Generic Implementation) 369
7.1.4 展望(Outlook) 376
7.2 创建工程(Creating Projects) 377
7.2.1 构建过程(Build Process) 378
7.2.2 构建工具(Build Tools) 382
7.2.3 分离编译(Separate Compilation) 386
7.3 最终的话(Some Final Words) 391
附录A 杂谈(Clumsy Stuff) 393
A.1 更多好的或者不好的软件(More Good and Bad Scientific Software) 393
A.2 细节中的基础(Basics in Detail) 400
A.2.1 关于字面量修饰的其他事项(More about Qualifying Literals) 400
A.2.2 静态变量(static Variables) 401
A.2.3 关于if的其他事项(More about if) 402
A.2.4 达夫设备(Duff’s Device) 404
A.2.5 关于main的其他事项(More about main) 404
A.2.6 异常还是断言?(Assertion or Exception?) 405
A.2.7 二进制I/O(Binary I/O) 406
A.2.8 C风格的I/O(C-Style I/O) 407
A.2.9 垃圾收集(Garbage Collection) 408
A.2.10 宏的麻烦(Trouble with Macros) 409
A.3 现实世界的用例:矩阵求逆(Real-World Example: Matrix Inversion) 411
A.4 类的一些细节(Class Details) 421
A.4.1 指向成员的指针(Pointer to Member) 421
A.4.2 更多的初始化例子(More Initialization Examples) 422
A.4.3 多维数组的存取(Accessing Multi-dimensional Arrays) 423
A.5 方法的生成(Method Generation) 426
A.5.1 控制生成的代码(Controlling the Generation) 428
A.5.2 代码生成的规则(Generation Rules) 429
A.5.3 陷阱和设计指南(Pitfalls and Design Guides) 434
A.6 模板相关的细节(Template Details) 438
A.6.1 统一初始化(Uniform Initialization) 438
A.6.2 哪个函数被调用了?(Which Function Is Called?) 439
A.6.3 针对特定硬件的特化(Specializing for Specific Hardware) 442
A.6.4 变参二进制I/O(Variadic Binary I/O) 443
A.7 使用C++03中的std::vector(Using std::vector in C++03) 444
A.8 复古风格的动态选择(Dynamic Selection in Old Style) 445
A.9 元编程的一些细节(Meta-Programming Details) 446
A.9.1 历史上的第一个元程序(First Meta-Program in History) 446
A.9.2 元函数(Meta-Functions) 448
A.9.3 向下兼容的静态断言(Backward-Compatible Static Assertion) 450
A.9.4 匿名类型参数(Anonymous Type Parameters) 450
A.9.5 “动态循环展开”的性能基准测试源码(Benchmark Sources of
Dynamic Unrolling) 454
A.9.6 矩阵乘法的性能基准测试(Benchmark for Matrix Product) 455
附录B 编程工具(Programming Tools) 456
B.1 gcc 456
B.2 调试(Debugging) 457
B.2.1 基于文本的调试器(Text-Based Debugger) 458
B.2.2 使用图形界面DDD进行调试(Debugging with Graphical Interface: DDD) 460
B.3 内存分析(Memory Analysis) 462
B.4 gnuplot 463
B.5 UNIX、Linux和macOS系统(UNIX, Linux, and macOS) 464
附录C 语言定义(Language Definitions) 467
C.1 值类别(Value Categories) 467
C.2 操作符概览(Operator Overview) 468
C.3 类型转换规则(Conversion Rules) 470
C.3.1 类型提升(Promotion) 471
C.3.2 其他类型提升(Other Conversions) 471
C.3.3 常用的数值转换(Usual Arithmetic Conversions) 472
C.3.4 窄化(Narrowing)

本目录推荐