gpt4 book ai didi

C++ 将区域设置全局重置为 "C"?

转载 作者:可可西里 更新时间:2023-11-01 16:38:50 25 4
gpt4 key购买 nike

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

每三位小数处插入逗号。即

cout << 123456789 << endl

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

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

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

setlocale(LC_ALL,"C");

认为它可能会将我的语言环境重置为默认值,但无济于事。逗号仍然存在!

这段代码:

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

用于重置 couts 和每个 stringstream 的区域设置我也应用它。但是,我真的需要在我链接到的每个库中声明的每个 stringstream 上调用 imbue 吗?有些库是专有的,我实际上无法更改它们的源代码。

必须有办法在全局范围内将语言环境重置回“C”吗?

最佳答案

我相信 std::locale::global(std::locale("C")); 应该可以解决问题。参见 http://en.cppreference.com/w/cpp/locale/locale/global

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

其他库已经注入(inject)的任何流,例如 cout,都必须重新注入(inject)到所需的默认语言环境。

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

关于C++ 将区域设置全局重置为 "C"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17202819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com