gpt4 book ai didi

c++ - 在 C++ 中设计一个字符串类

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:12 25 4
gpt4 key购买 nike

我需要用 C++ 设计(和编码)一个“定制的”字符串类。我正在寻找有关设计问题或我应该注意的潜在陷阱的任何文档和指示。

非常欢迎提供链接,以及识别当前字符串库(Qstring、std::string 和其他)的问题(如果有的话)。

最佳答案

尽管有批评,但我认为这是一个有效的问题。

std::string 不是 Elixir 。看起来有人从纯 OO 中获取类并将其转储到 C++ 中,这可能就是这种情况。

建议1:优先使用非成员(member)非好友方式

既然这么说,在这个国际化的时代,我当然建议你设计一个支持Unicode的类。我说的是 Unicode,而不是 UTF-8UTF-16。设计一个包含给定编码数据的类是不合适的(我认为)。您可以提供方法,然后以各种格式输出信息。

建议2:支持Unicode

然后,内存分配方案上有几点:

  • 小字符串优化:该类包含为几个字符(一打或两个)预分配的空间,从而避免为这些字符分配堆
  • 写入时复制:各种字符串共享一个缓冲区,因此复制很便宜,当一个字符串需要修改其内容时,如果它不是唯一所有者,它会复制缓冲区 --> 问题是多线程在这里引入了开销,并且已经表明,对于通用技术而言,这种开销可能会使实际复制成本相形见绌
  • 不可变性:JavaC#Python 等"new"语言使用不可变字符串。把它想象成一个字符串池,所有包含“Fooo”的字符串都将指向同一个缓冲区。请注意,这些语言支持垃圾回收,这在这方面很有帮助。

我个人会在这里选择“小字符串优化”(尽管它并不排斥其他两个),只是因为它易于实现并且实际上应该对您有益(堆分配成本、引用问题的位置)。

其他两种技术在面对多线程时有些复杂,而且很可能容易出错,除非精心设计,否则不太可能产生任何实际好处。

这就是我最后的建议:

建议 3:不要在尝试支持多线程时实现内部锁定

在单线程上下文中使用它会减慢类的速度,并且不会产生您在多线程上下文中使用时想象的那么多的好处。

最后,您也许可以通过浏览现有代码找到适合您口味的内容(或获得一些指导)。不过,我不保证会展示“流畅”的界面:

  • ICU UnicodeString : 至少支持 Unicode
  • std::string : 超过 100 个成员方法(包括各种重载)
  • llvm StringRef : 注意有多少算法实现为成员方法 :'(

关于c++ - 在 C++ 中设计一个字符串类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3599725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com