10

http://libcxx.llvm.org/がUbuntuまたはGCCで事前にパッケージ化されて利用可能にboost::const_stringなるまで、私は現在非常に賢いパッケージを使用しています。libcxxもデフォルトで _small-string 最適化 (SSO) を使用します。ただし、への出力に対するデフォルトのサポートは不足しています。コード__versa_stringext/vstring.hstd::string__versa_stringstd::ostream

#include <iostream>
#include <boost/const_string.hpp>

const_string<char> x;
std::cout << x << endl;

xc-string via を強制し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()NULLc_str()

4

3 に答える 3

2

これは、文字列のストリームに適用されるロケールおよび/またはファセットに基づいて、行っているように直接データを書き込むだけでなく、影響を与える可能性があるようです。

パフォーマンスは低下しますが、const_string から std::string を作成し、それを使用<<してストリームに挿入するのはどうでしょうか?

于 2011-04-20T14:38:09.307 に答える
1

いいえ(あなたは何も見逃していません、私の知る限り)。コンテンツをコピーすることが目的でない場合は、 str.data() が最適です。

于 2011-04-20T20:06:09.940 に答える