В настоящее время я использую очень умный пакет boost :: const_string
до тех пор, пока http://libcxx.llvm.org/ не будет доступен предварительно упакованным на Ubuntu или GCC, сделайте его __ versa_string
(в заголовке ext / vstring.h
) его строковая реализация по умолчанию. libcxx std :: string
, а также __ versa_string
по умолчанию использует оптимизацию _small-string (SSO). Поддержка по умолчанию для вывода в std :: Однако ostream
отсутствует. Код
#include
#include
const_string x;
std::cout << x << endl;
не будет работать, пока мы не введем x
в c-строку с помощью c_str ()
, которая станет
std::cout << x.c_str() << endl;
, которая компилируется и работает, как ожидалось. Я добавил следующую строку в const_string.hpp
template
inline std::ostream & operator << (std::ostream & os, const boost::const_string & a)
{
return os.write(a.data(), a.size());
}
. Это должно улучшить производительность по сравнению с x.c_str ()
, потому что size ()
уже известен и не должен быть вычисляется путем поиска NULL
как в c_str ()
. Я работаю на себя, но не уверен, работает ли это во всех случаях. Я что-то пропустил?