16

私は今日いくつかのコードで作業しています、そして私は見ました:

extern std::locale g_classicLocale;
class StringStream : public virtual std::ostringstream
{
 public:
        StringStream() { imbue(g_classicLocale); }
        virtual ~StringStream() {};
};

それから私はに直面しimbueました。imbueC ++の関数の目的は何ですか?それは何をするためのものか?使用に潜在的な問題はありますかimbue(非スレッドセーフ、メモリ割り当て)?

4

2 に答える 2

22

imbuestd::ostringstreamfromから継承されstd::ios_base、ストリームのロケールを指定されたロケールに設定します。

これは、ストリームが特定のものを印刷(および読み取り)する方法に影響します。たとえば、フランス語のロケールを設定すると、小数点が。.に置き換えられ,ます。

于 2012-08-06T15:55:54.083 に答える
8

localeC ++ストリームは、必要なすべてのローカリゼーション情報(小数点記号、日付形式など)を要約するオブジェクトである、に従って(数値)型との間で変換を実行します。

ストリームのデフォルトは現在のグローバルロケールを使用することですが、関数を使用してカスタムロケールをストリームに設定できますimbue。これは、コードがここで行うことです。デフォルトのCロケールを設定して、現在のロケールに依存しないテキストを生成していると思います(これは、たとえばシリアル化の目的で役立ちます)。

于 2012-08-06T15:57:00.683 に答える