C++在全局范围内将语言环境重置为"C"?

din*_*elk 10 c++ locale cout stringstream comma

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

逗号每三位小数插入一次.IE浏览器.

cout << 123456789 << endl
Run Code Online (Sandbox Code Playgroud)

用于打印出来123456789,现在打印出来123,456,789.这非常令人讨厌,因为这种行为不是我想要的.

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

我在调用initialize函数后尝试使用这行代码

setlocale(LC_ALL,"C");
Run Code Online (Sandbox Code Playgroud)

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

这段代码:

std::cout.imbue(std::locale("C"));
Run Code Online (Sandbox Code Playgroud)

用于重置我的couts每个stringstream应用程序的语言环境.但是,我真的需要调用我链接到的每个库中的imbue每个stringstream声明吗?有些库是专有的,我实际上无法更改其源代码.

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

Mar*_*k B 8

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

请注意,这仅影响此调用创建的流.

任何流,例如cout其他库已经流入的流都必须重新灌输回所需的默认语言环境.

最后,我强烈建议针对您正在使用的库提交缺陷报告,因为单方面在初始化函数中进行如此惊人的全局更改是没有道理的.