主要观点:以 C 为导向的技术(如 arena 分配和字符串处理)尝试用 C++特性构建,需权衡利弊。目标是减少与 C++复杂部分的接触,只使用能自信使用的高价值特性。
关键信息:
- 避免使用
public
、private
、const
(除特定需求),摒弃class
、friend
等关键字,减少代码冗余和缺陷。 - 避免除必要情况外的引用,因隐藏地址或导致昂贵复制,不利于理解 arena 接口。
- 理论上
constexpr
有用但实践中效果不佳,暂不使用。 - 尽量少用模板,因其会增加编译时间和代码大小,降低调试构建速度。
- 除有限使用操作符重载外,不用方法,保持 C 风格,函数重载可适当使用。
- 当然不用异常,假设
-fno-exceptions
已激活。 - 分配方面:C 中简化 arena 分配,C++中用模板
make
替代new
宏进行对象分配,可利用 placement new 进行值初始化,还可通过更新完善参数传递。 - 字符串方面:回顾基本 C 字符串类型,用模板替代
countof
宏,定义各种字符串相关操作如构造函数、比较运算符、下标运算符等,还提到未来可能使用 C++23 的多索引operator[]
作为切片运算符,但存在静态初始化问题,后用 union 解决。 - 存在静态初始化问题,如包含字符串的静态查找表在某些 C++实现中可能在运行时构造,而不是编译时。
- 有通用动态数组会更方便,哈希映射已基本解决无需通用映射,函数重载可简化命名,C++的空指针语义比 C 更好但仍有不足。
重要细节: new(a, t, n)
用于 arena 分配,make
模板用于 C++对象分配。- 字符串相关构造函数和操作符的具体实现及作用。
- 解决静态初始化问题的 union 方式。
- 提及各种功能的优缺点及在实际项目中的测试需求。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。