我目前正在使用非常聪明的包boost::const_string
,直到http://libcxx.llvm.org/在 Ubuntu 上预打包或 GCC 使其__versa_string
(在 header 中ext/vstring.h
)成为默认字符串实现。libcxxstd::string
以及__versa_string
默认情况下使用 _small-string 优化 (SSO)。std::ostream
但是,缺少对输出到 an 的默认支持。编码
#include <iostream>
#include <boost/const_string.hpp>
const_string<char> x;
std::cout << x << endl;
除非我们强制进入x
一个 c 字符串,否则它不起作用c_str()
std::cout << x.c_str() << endl;
它按预期编译和工作。我将以下行添加到const_string.hpp
template <typename T>
inline std::ostream & operator << (std::ostream & os, const boost::const_string<T> & a)
{
return os.write(a.data(), a.size());
}
这应该会提高性能,x.c_str()
因为size()
已经知道并且不需要通过搜索来NULL
计算c_str()
。我为我工作,但我不确定它是否适用于所有情况。我错过了什么吗?