如何用vstring替换std :: string?

时间:2014-04-23 21:50:51

标签: c++ string c++11 libstdc++

我最近了解到,自几年以来,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
}

1 个答案:

答案 0 :(得分:5)

不,无法将std::string替换为vstring,它可以作为替代字符串类型,而不是std::string的替代品

自GCC 5.1以来,该库附带了std::string的两个实现,对于任何给定的翻译单元,您可以选择通过_GLIBCXX_USE_CXX11_ABI宏使用哪个。这两种字符串类型具有不同的错位名称,因此不兼容链接。

有关详细信息,请参阅Dual ABI