2012-05-05 29 views
22

我看了一些GCC bugreport和那里的人在谈论“vstring”。搜索WEB我来通知http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/vstring_8h.html什么是GCC的“vstring”?

有人可以详细说明它的用途和用途吗?为什么使用它而不是std :: string?

+1

您提供的链接位于顶部*“此文件是标准C++库的GNU扩展。”*当然,这并不能完全回答您的问题。 –

+0

如果内存服务,那是/ std :: string'的实验重新实现,它具有相同的接口但是不同的内核。该文件在2005 - 2007年有版权日期,此后一直没有;建议在该时间段内搜索['libstdC++'邮件列表存档](http://gcc.gnu.org/ml/libstdc++/)。 – zwol

回答

23

GCC的vstring是一个多功能的字符串类,它是在GCC 4.1的libstdc++实现中引入的。

它与std::basic_string兼容,用这些附加细节:提供

  • 两个基类:
    • 默认一个避免引用计数和用于短字符串被优化;
    • 另一个,仍然使用它(参考计数,即),同时在一些低水平地区(如对齐)进行改进。有关有用的typedef,请参见vstring_fwd.h
  • 各种算法已被重写(例如替换),简化了代码并简化了优化。
  • DR 431的选项3针对两个可用基础实施,因此改善了对有状态分配器的支持。

DR431是Library Working Group Defect Report 431,与选项3恰似实现的类更好的支持分配器,以便更好地交换和其他分配相关的操作。

基本的细节从GCC 4.1's release notes,在运行时库部分。

编辑:

看起来好像这个扩展的初衷是提供一个C++ 11 std::string实现的基础。 GCC/libstdC++贡献者Paolo Carlini在GCC Bug Report中评论说<ext/vstring.h>包含下一个std::string的非参考计数实验版本。注释日期2012年4月12日:

我们试图解释的是,这种问题是众所周知的,更多或更少的 ,影响任何引用计数实现... 这不是情况下,当不使用引用计数确实也将是在新的实施std::string这 目前我们正在展示为<ext/vstring.h>使用(根据新的C++标准11) ...

+0

发明它的理由是什么?它最终会成为std :: string的实现吗? –

+1

@ JohannesSchaub-litb - 我相信这是'ext/vstring.h'的最初目的,它会提供一个非引用计数的字符串实现,最终会成为默认的(或作为基础)一个新的std :: GCC C++ 11实现的字符串实现。在GCC邮件列表和错误报告中有各种各样的评论,似乎指向这一点,就像这样的评论:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52938#c5和这个:http:// old.nabble.com/Re%3A--RFC--C%2B%2B1x-breaking-the-ABI-in-one-more-place-%3A%28-p28618810.html。这和我所知道的一样多,没有问。 – birryree

+2

http://gcc.gnu.org/ml/libstdc++/2012-01/msg00064.html意味着它尚未成为'std :: string'实现的唯一原因是ABI兼容性约束。 – zwol