什么是GCC的"vstring"?

Joh*_*itb 22 c++ gcc

我读了一些GCC bugreport,那里有人在谈论"vstring".搜索WEB我注意到http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/vstring_8h.html.

有人可以详细说明它有用和用于什么?为什么用它代替std :: string?

wkl*_*wkl 23

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

std::basic_string与以下附加细节兼容:

  • 提供两个基类:
    • 默认值避免引用计数,并针对短字符串进行优化;
    • 替代的,仍然使用它(引用计数,即),同时改善一些低级别区域(例如,对齐).请参阅vstring_fwd.h一些有用的typedef.
  • 已经重写了各种算法(例如,替换),添加了代码简化和简单优化.
  • DR 431的选项3针对两个可用基础实现,从而改进了对有状态分配器的支持.

DR431是库工作组缺陷报告431,选项3看起来像是为类实现更好的分配器支持,以允许更好的交换和其他与分配器相关的操作.

基本详细信息来自GCC 4.1的发行说明,位于运行时库部分下.

编辑:

看起来这个扩展的最初目的是为C++ 11 std::string实现提供基础.GCC/libstdc ++撰稿人保罗·卡里尼(Paolo Carlini)在此GCC错误报告中发表评论,该报告<ext/vstring.h>包含下一个非参考计数的实验版本std::string.日期为2012年4月12日的评论:

我们试图解释的是,这类问题是众所周知的,或多或少地影响任何引用计数实现... 当不使用引用计数时实际情况并非如此,实际上它不会被使用(按照新的C++ 11 Standard)在std::string我们目前展示的新实现中<ext/vstring.h> ......

  • 随着GCC 5中的ABI转换,我引入了一个新的`std :: basic_string`实现,从vstring的SSO版本复制了大部分代码. (3认同)
  • http://gcc.gnu.org/ml/libstdc++/2012-01/msg00064.html意味着它尚未成为`std :: string`实现的唯一原因是ABI兼容性约束. (2认同)