知道这本书已经好久了,但是一直没有去认真拜读,在实践中发现自己还是需要多提升提升编码的规范和格局,这样才能制造出更好的代码。本书一共列出了45个具体的细节来修复代码中的不足。为了搞懂本书,我们先从导读说起。

目录
一、书中中英文对照
二、术语
2.1 声明式(declaration)
2.2 定义式(definition)
2.3 初始化
2.4 构造函数
2.5 STL 标准模板库
2.6 接口
2.7 关于线程
2.8 TR1 和 Boost
三、总结
本书中有许多编程的英文术语,我给他贴出来放到下面:
| 英文术语 | 描述 |
|---|---|
| abstract | 抽象的 |
| abstraction | 抽象性 |
| access | 访问 |
| access level | 访问级别 |
| access function | 访问函数 |
| adapter | 适配器 |
| address | 地址 |
| address-of operator | 取地址操作符 |
| aggregation | 聚合 |
| algorithm | 算法 |
| allocate | 分配 |
| allocator | 分配器 |
| application | 应用程序 |
| architecture | 体系结构 |
| argument | 实参 |
| array | 数组 |
| arrow operator | 箭头操作符 |
| assembly language | 汇编语言 |
| assert(-ion) | 断言 |
| assign(-ment) | 赋值 |
| assignment operator | 赋值操作符 |
| base class | 基类 |
| base type | 基类型 |
| binary search | 二分查找 |
| binary tree | 二叉树 |
| binary operator | 二元操作符 |
| binding | 绑定 |
| bit | 位 |
| bitwise | 以 bit 为单元逐一...... |
| block | 区块 |
| boolean | 布尔值 |
| breakpoint | 断点 |
| build | 构建 |
| build-in | 内置 |
| bus | 总线 |
| byte | 字节 |
| cache | 高速缓存(区) |
| call | 调用 |
| callback | 回调 |
| call operator | call 操作符 |
| character | 字符 |
| child class | 子类 |
| class | 类 |
| class template | 类模板 |
| client | 客户(端) |
| code | 代码 |
| compatible | 兼容 |
| compiler time | 编译期 |
| compiler | 编译器 |
| component | 组件 |
| composition | 复合 |
| concrete | 具象的 |
| concurrent | 并发 |
| configuration | 配置 |
| connection | 连接 |
| constraint | 约束(条件) |
| construct | 构件 |
| container | 容器 |
| const | C++ 关键字,constant 的缩写 |
| constant | 常量 |
| constructor | 构造函数 |
| copy | 拷贝(动词/名词),副本(名词) |
| create | 创建 |
| custom | 定制 |
| data | 数据 |
| database | 数据库 |
| data member | 数据成员(变量) |
| data structure | 数据结构 |
| debug | 调试 |
| debugger | 调试器 |
| declaration | 声明式 |
| default | 缺省(默认) |
| definition | 定义式 |
| delegate | 委托 |
| dereference | 提领(解参考) |
| derived class | 派生类 |
| design pattern | 设计模式 |
| destroy | 销毁 |
| destructor | 析构函数 |
| directive | 指示符 |
| document | 文档 |
| dynamic binding | 动态绑定 |
| entity | 物体 |
| encapsulation | 封装 |
| enum(-eration) | 枚举 |
| equality | 相等 |
| equivalence | 等价 |
| evaluate | 核定、核算 |
| exception | 异常 |
| explicit | 显式 |
| expression | 表达式 |
| file | 文件 |
| framework | 框架 |
| full specialization | 全特化 |
| function | 函数 |
| function object | 函数对象 |
| function template | 函数模板 |
| generic | 泛型、泛化、一般化 |
| getter | 取值函数 |
| global | 全局的 |
| handle | 句柄 |
| handler | 处理函数 |
| hash table | 哈希表、散列表 |
| header(file) | 头文件 |
| heap | 堆 |
| hierarchy | 继承体系 |
| identifier | 标识符 |
| implement(-ation) | 实现 |
| implicit | 隐喻的、暗自的、隐式 |
| information | 信息 |
| inheritance | 继承 |
| inline | 内联 |
| initialization list | 初始化列表 |
| initialize | 初始化 |
| instance | 实体 |
| instantiate | 实体化 |
| interface | 接口 |
| Internet | 互联网 |
| interpreter | 解释器 |
| invariants | 恒常性 |
| invoke | 调用 |
| iterator | 迭代器 |
| library | 程序库 |
| linker | 连接器 |
| literal | 字面常量 |
| list | 链表 |
| load | 装载 |
| local | 局部的 |
| lock | 机锁 |
| loop | 循环 |
| lvalue | 左值 |
| macro | 宏 |
| member | 成员 |
| member function | 成员函数 |
| memory | 内存 |
| memory leak | 内存泄漏 |
| meta | 元 |
| meta-programming | 元编程 |
| modeling | 塑膜 |
| module | 模块 |
| modifier | 修饰符 |
| multi-tasking | 多任务 |
| namespace | 命名空间 |
| native | 固有的 |
| nested | 嵌套的 |
| object | 对象 |
| object based | 基于对象的 |
| object model | 对象模型 |
| object oriented | 面对对象 |
| operand | 操作数 |
| operating system | 操作系统 |
| operator | 操作符 |
| overflow | 溢出 |
| overhead | 额外开销 |
| overload | 重载 |
| override | 覆写 |
| package | 包 |
| parallel | 并行 |
| parameter | 参数、形参 |
| parent class | 父类 |
| parse | 解析 |
| partial specialization | 偏特化 |
| pass by reference | 按址传递 |
| pass by value | 按值传递 |
| pattern | 模式 |
| placement delete | (某种特殊形式的 delete operatoe) |
| placement new | (某种特殊形式的 new operatoe) |
| pointer | 指针 |
| polymorphism | 多态 |
| preprocessor | 预处理器 |
| 打印 | |
| printer | 打印机 |
| process | 进程 |
| program | 程序 |
| programer | 程序员 |
| programming | 编程 |
| project | 项目 |
| pseudo code | 伪代码 |
| quality | 质量 |
| queue | 队列 |
| raw | 原始的、未经处理的 |
| recursive | 递归 |
| refer to | 指向、指称 |
| reference | 引用 |
| regular expression | 正则表达式 |
| resolve | 解析 |
| return | 返回 |
| return type | 返回类型 |
| return value | 返回值 |
| runtime | 运行期 |
| rvalue | 右值 |
| save | 保存 |
| schedule | 调度 |
| scheduler | 调度器 |
| scope | 作用域 |
| search | 查找 |
| semantics | 语义 |
| setter | 设值函数 |
| signature | 签名 |
| smart pointer | 智能指针 |
| specialization | 特化 |
| source | 源码 |
| stack | 栈 |
| standard library | 标准程序库 |
| statement | 语句 |
| static | 静态的 |
| string | 字符串 |
| subtype | 子类型 |
| support | 支持 |
| template | 模板 |
| temporary object | 临时对象 |
| text | 文本 |
| thread | 线程 |
| thread safe | 多线程安全 |
| throw | 抛出 |
| token | 语汇单元 |
| type | 类型 |
| unary function | 单参函数 |
| underflow | 下溢 |
| unqualified | 未经资格修饰 |
| user | 用户 |
| user interface | 用户界面 |
| value | 值 |
| variable | 变量 |
| vector | 矢量 |
| virtual function | 虚拟函数 |
| virtual machine | 虚拟机 |
声明式是告诉编译器变量或者函数的名称和类型,但略去细节。
extern int x; // 对象声明式
std::size_t numDigits(int number); // 函数声明式
class Widget; // class declaration // 类声明式
template// 模板声明式
class GraphNode; // typename 的使用 std::size_t表示类型 size_t 位于命名空间 std 内。这个命名空间是几乎所有 C++ 标准程序库元素的存放处。定义式的任务是提供编译器一些声明式所略去的细节。对对象而言,定义式是编译器为此对象分配内存的地点。
int x; // 定义对象
std::size_t numDigits(int number) // 定义函数
{ // 此函数返回其参数的数字个数
std::size_t digitsSoFar = 1; // 例如十位数返回 2,百位数返回 3
while ((number /= 10) != 0)
++digitsSoFar;
return digitsSoFar;
}
class Widget
{ // 定义类
public:
Widget();
~Widget();
// ...
};
template// 定义模板
class GraphNode
{
public:
GraphNode();
~GraphNode();
// ...
}; 2.3 初始化初始化是给予对象初值的过程。对用户自定义类型的对象而言,初始化由构造函数执行。默认构造函数是一个可被调用而不带任何实参者。这样的构造函数要不没有参数,要不就是每个参数都有缺省值。
class A
{
public:
A(); // 默认构造函数
};
class B
{
public:
explicit B(int x = 0, bool b = true); // 默认构造函数
};
class C
{
public:
explicit C(int x); // 不是默认构造函数
};
void doSomething(B bObject); //函数,接受一个类型为 B 的对象作为参数
B bObj1; // 类型为 B 的对象
doSomething(bObj1); // 正确,传递一个类型为 B 的对象给 doSomething 函数
B bObj2(28); // 正确,定义 B 类型的类型并赋初始值为 28
// (函数的 bool 参数缺省为 true)
doSomething(28); // 错误! doSomething 函数应接受一个 B 类型的参数,而不是 int 类型
// 并且没有 int 至 B 之间隐式转换
doSomething(B(28)); // 正确,使用 B 构造函数及那个 int 类型显式转换(也就是转型)为一个 B 类型以满足此调用构造函数被用来以同型对象初始化自我对象,拷贝赋值操作符被用来从另一个同型对象中拷贝其值到自我对象。
class Widget
{
public:
Widget(); // 默认构造函数
Widget(const Widget& rhs); // 拷贝构造函数
Widget& operator=(const Widget& rhs); // 拷贝赋值操作符
// ...
};
Widget w1; // 调用默认构造函数
Widget w2(w1); // 调用拷贝构造函数
w1 = w2; // 调用拷贝赋值操作符
Widget w3 = w2; // 调用拷贝构造函数
bool hasAcceptableQuality(Widget w);
Widget aWidget;
if (hasAcceptableQuality(aWidget))
;STL 是 C++ 标准程序库的一部分,致力于容器(如 vector、list、set、map 等等)、迭代器(如 vector
对其他语言转换至 C++ 阵营的程序员而言,另一个可能造成困惑的术语是接口。Java 和 .NET 语言都提供接口为语言元素, 但 C++ 没有,本书中使用术语 “接口” 时,一般谈的是函数的签名(signature)或类的可访问元素(例如我可能会说类的 “公共接口” 或 “保护接口 ” 或 “私有接口”),或是针对某模板类型参数需为有效的一个表达式。也就是说的接口完全是指一般性的设计观念。
2.7 关于线程作为一个语言,C++ 对线程没有任何意念,事实上它对任何并发事物都没有意念。C++ 标准程序库也一样。当 C++ 受到全世界关注时多线程程序还不存在。
但是本书作者会说出哪块可能会存多线程安全问题。敬请关注后续内容。
2.8 TR1 和 Boost三、总结TR1(Technical Report 1 简称 TR1)是一份规范,描述加入 C++ 标准程序库的诸多新功能。这些功能以新的类模板和函数模板形式体现,针对的题目有哈希表,引用计数智能指针,正则表达式以及更多。 所有 TR1 组件都被置于命名空间 tr1 内,后者又嵌套于命名空间 std 内。
Boost 是个组织,亦是一个网站,提供可移植、同行复审、源码开放的 C++ 程序库。大多数 TR1 机能是以 Boost 的工作为基础。在编译器厂商于其 C++ 程序库中含入 TR1 之前,对那些搜寻 TR1 实现品的开发人员而言,Boost 网站可能是第一个逗留点。Boost 提供比 TR1 更多的东西,所以无论如何值得了解它。
以上均为本书的基础介绍,期待后续的改善程序的细节的更新吧。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧