16

我今天正在处理一些代码,我看到:

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

然后我遇到了imbueimbueC ++中函数的目的是什么?它有什么作用?imbue使用(非线程安全,内存分配)是否有任何潜在问题?

4

2 回答 2

22

imbuestd::ostringstreamfrom继承,std::ios_base并将流的语言环境设置为指定的语言环境。

这会影响流打印(和读取)某些内容的方式;例如,设置法语语言环境将导致小数点.被替换为,.

于 2012-08-06T15:55:54.083 回答
8

C++ 流根据 a 执行与(数字)类型之间的转换locale,该对象汇总了所需的所有本地化信息(十进制分隔符、日期格式等)。

流的默认设置是使用当前的全局语言环境,但是您可以使用该imbue函数为流设置自定义语言环境,这就是您的代码在此处所做的 - 我想它正在设置默认的 C 语言环境以生成当前与语言环境无关的文本(这很有用,例如用于序列化目的)。

于 2012-08-06T15:57:00.683 回答