В настоящее время я использую очень умный пакет 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 <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()
. Я работаю для меня, но я не уверен, работает ли он во всех случаях. Я что-то пропустил?