C++ 什么是GCC';s";vstring";?
我读了一些GCC错误报告,那里的人在谈论“vstring”。搜索我注意到的网页C++ 什么是GCC';s";vstring";?,c++,gcc,C++,Gcc,我读了一些GCC错误报告,那里的人在谈论“vstring”。搜索我注意到的网页 有人能详细说明一下它的用途吗?为什么要使用它而不是std::string?GCC的vstring是一个多功能字符串类,它是在gcc4.1的libstdc++实现中引入的 它与std::basic_string兼容,具有以下附加细节: 提供了两个基类: 默认值避免引用计数,并针对短字符串进行了优化 另一种方法仍然使用它(即参考计数),同时在一些低级别区域(例如对齐)进行改进。有关一些有用的typedef,请参见vs
有人能详细说明一下它的用途吗?为什么要使用它而不是std::string?GCC的
vstring
是一个多功能字符串类,它是在gcc4.1的libstdc++
实现中引入的
它与std::basic_string
兼容,具有以下附加细节:
- 提供了两个基类:
- 默认值避免引用计数,并针对短字符串进行了优化李>
- 另一种方法仍然使用它(即参考计数),同时在一些低级别区域(例如对齐)进行改进。有关一些有用的typedef,请参见
vstring_fwd.h
- 各种算法已被重写(例如,替换),代码简化并添加了简单的优化
- DR 431的选项3对两个可用的基址都实现,因此改进了对有状态分配器的支持
std::string实现提供基础。GCC/libstdc++撰稿人保罗·卡里尼(Paolo Carlini)在这篇文章中评论说,
包含下一个std::string
的非参考计数实验版本。2012年4月12日的评论:
我们试图解释的是,这类问题是众所周知的,而且或多或少
较少,影响任何引用计数的实现。。。
如果不使用引用计数,则情况并非如此,事实上也不会如此
(根据新的C++11标准)在std::string
的新实现中使用
我们目前展示的是
你所提供的链接在顶部提到“这个文件是标准C++库的GNU扩展”,当然,这并不能完全回答你的问题。如果内存服务,那是一个实验性的重新实现<代码> STD::String ,界面相同但不同的内脏。该文件的版权日期为2005-2007年,自那以后就没有了;建议在这段时间内搜索该网站,以获取相关信息。发明该网站的理由是什么?它最终会成为std::string的实现吗?@johanneschaub litb-我相信这是ext/vstring.h
的最初目的,它将提供一个非引用计数的字符串实现,最终将成为默认值(或作为基础)为GCC的C++11实现提供了一个新的std::string
实现。GCC邮件列表和bug报告中有各种各样的注释,似乎都指向了这一点,比如这个注释:和这个:。这是我不问就知道的。这意味着它尚未成为std::string
实现的唯一原因是ABI兼容性约束。随着GCC 5中的ABI转换,我引入了一个新的std::basic_string
实现,从vstring的SSO版本复制了大部分代码。对于那些不认识首字母缩写词的人(就像几秒钟前的我一样)-SSO是上面提到的“短字符串优化”。另请参见这里的Stackoverflow。