当前位置:主页   - 电脑 - 程序设计 - C/C++
C/C++字符串处理(2):String - 常字符串
来源:网络   作者:   更新时间:2012-02-08
收藏此页】    【字号    】    【打印】    【关闭

  Table of Contents

  概要

  理解String(BasicString)

  关于TempString基类

  源码

  参考阅读

  概要

  我们知道,C++标准库(STL)提供了string(basic_string)类进行字符串操作。字符串很可能除了内存分配器(allocator)1外使用最为频繁的STL类。但是C++社区对string的指责从来就没有停止过。

  归纳起来,STL的string类主要有以下这些争议点:

  接口过多且规格和其他STL容器没有达成很好的一致性。例如,string::find使用下标,而不是以iterator作为迭代位置,这和其他容器不太一样。

  内存碎片。由于过于频繁的字符串构造、析构,导致系统的内存碎片现象严重。

  Copy -On-Write与多线程安全。string(basic_string)基于Copy-On-Write技术的原因,是因为 string的赋值被设计成为低开销的。但是一旦考虑到多线程安全问题,Copy-On-Write会把大量的时间花在锁的开销上。一些新的STL实现 (如SGI STL)放弃了基于Copy-On-Write的string实现。

  我认同这些指责。字符串最好的设计,还是将string分拆为一个常字符串(std::String)和一个字符串操作类(StringBuilder)。我们的StdExt库这样做了。

  理解String(BasicString)

  StdExt的String(BasicString),和你以前见过的所有字符串类都不太一样。这个类比你想象的还要简单,它只有两个成员变量:

template <class _E>
class BasicString
{
    const _E* m_pszBuf;
    size_t m_length;
};

  它区别于string(basic_string)之处在于:

  它是一个常字符串,它永远不会试图去篡改字符串内容(m_pszBuf指向的数据)。

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明