13

在我目前正在进行的一个项目中,我链接到一个专有的动态库。一旦我运行库的初始化函数,记录和打印数字的行为就会改变。

每三位小数插入逗号。IE。

cout << 123456789 << endl

以前打印出来123456789,现在打印出来123,456,789。这非常烦人,因为这种行为不是我想要的。

这个问题不仅在我正在编译的二进制文件中很明显,而且还出现在我链接到它的所有库中coutsstringstreams

我在调用初始化函数后尝试使用这行代码

setlocale(LC_ALL,"C");

认为它可能会将我的语言环境重置为默认值;但无济于事。逗号坚持!!

这段代码:

std::cout.imbue(std::locale("C"));

用于重置couts和每一个stringstream我应用它的语言环境。但是,我真的需要调用我链接到的每个库中声明的每个吗imbuestringstream有些库是专有的,我实际上无法更改它们的源代码。

必须有办法将语言环境重置回"C"全局?

4

1 回答 1

11

我相信std::locale::global(std::locale("C"));应该做的伎俩。请参阅http://en.cppreference.com/w/cpp/locale/locale/global

请注意,这只影响在此调用之后创建的流。

任何诸如cout其他库已经被灌输的流都必须重新灌输回所需的默认语言环境。

最后,我强烈建议针对您正在使用的库提交缺陷报告,因为在初始化函数中单方面进行如此引人注目的全局更改是非常不合理的。

于 2013-06-19T23:14:52.973 回答