我最近学到,自从几年前以来,库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
}
vstring
在4.1中被添加。请参阅https://dev59.com/JGkv5IYBdhLWcg3wpCMz。 - Chnossosstd::string
非引用计数,但我在发布说明中没有看到这一点。您可以通过使用my::string s = os.str().c_str();
来修复您列出的一个案例中的错误。甚至可能有一种方法可以访问底层streambuf以避免中间的std::string
,但我不确定这部分。 - Praetorian