2022¶
C++语言导学(9): 并发(上)
引言
多线程程序常用来提高速度和吞吐量,但数据同步与共享等问题让多线程开发变得复杂,有时候过多的控制底层细节往往难以防范错误的发生。
C++语言导学(8): 模板
引言
模板是一个很复杂的主题,这里只涉及最基础的部分。
模板(template)是一个类或一个函数,可以用一组类型或值来进行参数化。
模板是一种编译时机制,一个模板加上一组模板实参被称为特例化
,会由编译器根据实参自动生成对应的代码进而编译。
C++语言导学(7): 函数对象(Function Object)
函数对象(Function Object)
定义了operator()操作的对象就称为Function Object:
C++语言导学(6): lambda表达式
引言
lambda表达式是一个可执行的代码单元,可以看作是一个匿名内联(inline)函数,下面以匿名函数代指lambda表达式。
定义语法:
匿名函数的函数体一般操作比较少,而且匿名函数一般不会反复在多处使用,常是一次性的。
C++语言导学(5): 容器
引言
如果一个类的主要目的是保存对象,那么通常称之为容器(container)。
这里主要简单概述一下这些标准库容器:
- vector: 有序序列
- list: 双向链表
- map: 关联字典
- unordered_map: 无序哈希
C++语言导学(4): pImpl习惯用法
条款31: 将文件间的编译依存关系降到最低。 --- 《Effective C++》
条款22: 使用pImpl习惯用法时,将特殊成员函数的定义放到实现文件中。 --- 《Effective Modern C++》
pImpl
习惯用法,即pointer to implementation
,指的是以指针的方式访问类的实现部分。
C++语言导学(3): RAII与智能指针
引言
C++提供开发者自定义类型的能力,而对于自定义类型的资源管理是一大难题。
对于一个自定义类型或者class来说,可以直接创建它的对象,也可以通过new为它创建指针。
对于对象和指针的资源管理,分别可以使用RAII原则和智能指针来处理。
C++语言导学(2): 模块化
引言
程序组织的最佳方式是将程序看作依赖关系定义良好的一组模块,在逻辑上通过语言特性表达模块化,在物理上通过文件模块化实现高效的分别编译。
程序源码文件模块化最重要的一步是将每个组成部分的接口和实现分离开来,借助分别编译、后续链接的方式提高编译效率。
以往是通过头文件(*.hpp
)和实现文件(*.cpp
)来达到分离目的,在编译为动态链接库(*.so
)供其他人使用的时候特别方便,可以达到隐藏细节的目的。