我最近了解到,自几年以来,libstdc ++库包含vstring
(也称为versa_string
),它提供与std::string
相同的功能,但显然更符合C ++标准。我曾尝试使用vstring
替代std::string
,但我找不到简单的方法。
是否可以轻松地将std::string
替换为vstring
,而无需更改libstdc ++来源?
我可以通过别名替换代码中std::string
的所有用法,如下面的清单所示。但是,这种方法存在的问题是std::string
也在某些地方内部使用,例如在std::ostringstream
。这意味着,std::ostringstream os; my::string s = os.str();
语句不再有效。
namespace my {
#ifdef __GLIBCXX__
using string = __gnu_cxx::__vstring;
#else
using string = std::string;
#endif
}
答案 0 :(得分:5)
不,无法将std::string
替换为vstring
,它可以作为替代字符串类型,而不是std::string
的替代品
自GCC 5.1以来,该库附带了std::string
的两个实现,对于任何给定的翻译单元,您可以选择通过_GLIBCXX_USE_CXX11_ABI
宏使用哪个。这两种字符串类型具有不同的错位名称,因此不兼容链接。
有关详细信息,请参阅Dual ABI。