字符串能用于存储人工或自然语言的文字,自然语言是复杂的,文字处理也是有各种各样的需求,C++标准库从 80 年代至今的发展已加入了大量的功能,但要集中处理各种场合的「最大公因数」,以至于处理历史包袱,及各个操作系统对语言处理的偏好。
随便列一下「理想的」字符串类能支持什么:
- 跨平台、跨编译器、跨 C++ 版本
- 支持 UTF-8/16/32,能包含
u0000
字符 - 支持 Multi-Byte Character Set (MBCS) 等各种编码
- 各种运算能正确处理各种编码的字符边界,包括 UTF-16 代理對(surrogate pair)
- 支持各种编码间的转换
- 支持各种语言的各种排序(如包括汉语拼音、笔划)
- 支持编译期和运行期计算哈希值
- 支持字符串视图(string view)及运算
- 可自订分配器(custom allocator),可利用非连续的内存存储长字符串
- 支持 Immutable 和 String Interning
- 可选写入时复制(Copy-On-Write, COW)优化
- 可选短字符串优化(Short String Optimization,SSO)
- 支持各种 SIMD 指令集的优化
- 低耦合性,用不到的功能不会被链接至执行文件
欢迎补充。