关于 C++ 中竞技场和自定义字符串的推测

主要观点:以 C 为导向的技术(如 arena 分配和字符串处理)尝试用 C++特性构建,需权衡利弊。目标是减少与 C++复杂部分的接触,只使用能自信使用的高价值特性。
关键信息:

  • 避免使用publicprivateconst(除特定需求),摒弃classfriend等关键字,减少代码冗余和缺陷。
  • 避免除必要情况外的引用,因隐藏地址或导致昂贵复制,不利于理解 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 方式。
  • 提及各种功能的优缺点及在实际项目中的测试需求。
阅读 8
0 条评论