【发布时间】:2014-04-23 21:50:50
【问题描述】:
我最近了解到,几年前 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 中添加。见stackoverflow.com/questions/10463851/what-is-gccs-vstring。 -
我似乎记得 Herb Sutter 在一些视频中说 gcc4.9 将使
std::string不被计算在内,但我在发行说明中没有看到这一点。您可以改用my::string s = os.str().c_str();来修复您列出的一种情况下的错误。甚至可能有一种方法可以访问底层流缓冲区以避免中间std::string,但我不确定那部分。 -
@Praetorian:JW 说它不会制作 4.9 stackoverflow.com/questions/21431633/…
-
确实,COW 字符串死亡的传言被大大夸大了 ;-) 要回答这个问题,不,没有办法在库中替换
std::string。您必须等待 GCC 4.10 -
@JonathanWakely:我想你可以这样回答。
标签: c++ string c++11 libstdc++