杂项讨论,Misc
# 杂项讨论,Misc
# Item 32:在未来时态下发展程序
在未来时态下发展程序, 为以后程序的变动留下足够的弹性设计空间;(设计模式和设计经验, 架构的经验)
● 提供完整的 classes(见Item E18)——即使某些部分目前用不到。当新的需求进来,你不太需要回头去修改那些 classes。
● 设计你的接口,使有利于共同的操作行为,阻止共同的错误(见Item E46)。让这些 classes 轻易地被正确运用,难以被错误运用。例如,面对那些“copying和 assignment 并不合理”的classes,请禁止那些动作的发生(见Item E27)。请防止部分赋值(partial assignments,见Item 33)的发生。
● 尽量使你的代码一般化(泛化),除非有不良的巨大后果。举个例子,如果你正在写一个算法,用于树状结构(tree)的来回遍历,请考虑将它一般化,以便能够处理任何种类的 directed acyclic(非环状的)graph
# Item 33:将非尾端类(non leaf classes)设计为抽象类(abstract classes)
将non leaf class 设计为一个抽象类(最上层的类, 利于派生)
# Item 34:如何在同一个程序中结合 C++和 C
如何在同一个程序中结合C和C++
#ifdef _cplusplus
extern "C" {
#endif
[ C code ]
#ifdef _cplusplus
}
#endif
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
static class 对象、全局对象、namespace 内的对象以及文件范围(file scope)内的对象,其 constructors 总是在 main 之前就获得执行。这个过程称为 static initialization(见Item E47)
# Item 35:让自己习惯于标准 C++语言(多用一些C++的新特性)
让自己习惯于标准的C++的一些新特性,
- 支持数值应用。复数(complex numbers)长久以来是许多 C++教科书的示范对象,如今终于被奉祀于标准程序库的殿堂上。此外,标准程序库还包含特殊的数组类(valarrays),可以制止别名(aliasing)的发生。这些数组比传统的内建数组有更进取的优化倾向,特别是在多进程结构体系(multiprocessing architectures)下。标准程序库也提供一些常用的数值函数,包括“部分和(partial sum)”以及“相邻差值(adjacent difference)”。●
- 支持广泛用途的 containers(容器)和 algorithms(算法)。C++标准程序库内含一组 class templates 和 function templates,统称为 Standard Template Library(STL)。STL 是 C++标准程序库中最具革命性的部分。稍后我会摘要说明其特征。
- 支持数值应用。复数(complex numbers)长久以来是许多 C++教科书的示范对象,如今终于被奉祀于标准程序库的殿堂上。此外,标准程序库还包含特殊的数组类(valarrays),可以制止别名(aliasing)的发生。这些数组比传统的内建数组有更进取的优化倾向,特别是在多进程结构体系(multiprocessing architectures)下。标准程序库也提供一些常用的数值函数,包括“部分和(partial sum)”以及“相邻差值(adjacent difference)”。
- 支持广泛用途的 containers(容器)和 algorithms(算法)。C++标准程序库内含一组 class templates 和 function templates,统称为 Standard Template Library(STL)。STL 是 C++标准程序库中最具革命性的部分。稍后我会摘要说明其特征。
- STL
- 支持 C标准函数库。别担心,C++还记得它的根源。某些微小的变化,使“C++版本的 C函数库”与“C++的强烈类型检验性质”得以一致。但是,你对 C函数库所知道的一切,以及对它的爱恨情仇,在 C++中都依然存在。
- 支持 strings。就像 C++标准程序库小组主席 Mike Vilot所说:“如果没有提供一个标准的 string 类型,恐怕会出现街头流血事件!”(有些人就是这么感情用事。)冷静点,放下那些砖头棍棒——C++标准程序库提供了 string。
- 支持国别(地域别、本土化,localization)。不同的文化使用不同的字符集,并在显示日期、时间、排序事物、货币值的时候有着不同的习俗。标准程序库对于国别的支持,使程序开发得以轻松容纳多种文化差异。
- 支持 I/O。iostream 程序库仍旧是标准 C++的一部分,但是委员会对它做了一些修补。虽然某些 classes 被剔除了(特别值得注意的是 iostream 和fstream),某些 classes 被取代了(例如 string-based stringstreams 取代了 char*-based strstreams,后者不再被标准委员会认可),不过 iostream 内的各个标准 classes仍可忠实反映那些早已存在多年的基本功能。
- 支持数值应用。复数(complex numbers)长久以来是许多 C++教科书的示范对象,如今终于被奉祀于标准程序库的殿堂上。此外,标准程序库还包含特殊的数组类(valarrays),可以制止别名(aliasing)的发生。这些数组比传统的内建数组有更进取的优化倾向,特别是在多进程结构体系(multiprocessing architectures)下。标准程序库也提供一些常用的数值函数,包括“部分和(partial sum)”以及“相邻差值(adjacent difference)”。
- 支持数值应用。复数(complex numbers)长久以来是许多 C++教科书的示范对象,如今终于被奉祀于标准程序库的殿堂上。此外,标准程序库还包含特殊的数组类(valarrays),可以制止别名(aliasing)的发生。这些数组比传统的内建数组有更进取的优化倾向,特别是在多进程结构体系(multiprocessing architectures)下。标准程序库也提供一些常用的数值函数,包括“部分和(partial sum)”以及“相邻差值(adjacent difference)”。
- 支持广泛用途的 containers(容器)和 algorithms(算法)。C++标准程序库内含一组 class templates 和 function templates,统称为 Standard Template Library(STL)。STL 是 C++标准程序库中最具革命性的部分。稍后我会摘要说明其特征。
推荐的阅读清单: 后面可以一起总结
- 有一本书的基调和我的 Effective C++差不多,但涵盖主题不同:C++ Strategies and Tactics
一个造轮子的repo: https://github.com/codecrafters-io/build-your-own-x
shared_ptr() 代码
auto_ptr() 代码