gpt4 book ai didi

c++ - boost::lexical_cast<> 的语言环境不变保证

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:34 25 4
gpt4 key购买 nike

我正在使用 boost::lexical_cast<std::string>(double)用于将 double 转换为字符串,生成 JSON 序列化字节流,即(在远程端)由 .NET 解析。

我能够强制 .NET 使用 InvariantCulture用于解析,从而在每种可能的语言上返回可预测的结果。

但是,我无法在 boost::lexical_cast 中找到此保证文档。我试了一下,对于不同的区域设置,它的工作方式相同。但是,我不能仅从几个测试中确定,我是否遗漏了文档中的某些内容,或者根本无法保证这一点,我必须使用其他东西吗?

编辑:我发现了一个问题。

std::locale::global(std::locale("Czech")); 
std::cout << boost::lexical_cast<std::string>(0.15784465) << std::endl;

返回 0,15784465 ,这是不希望的。我可以强制 boost::lexical_cast<>不了解语言环境?

最佳答案

Can I force the boost::lexical_cast<> not to be aware of locales?

不,我不认为这是可能的。你能做的最好的事情就是打电话

std::locale::global(std::locale::classic());

将全局语言环境设置为“C”语言环境,因为 boost::lexical_cast 依赖于全局语言环境。但是,问题是如果在调用 boost::lexical_cast 之前代码中的其他地方将全局语言环境设置为其他内容,那么您仍然会遇到同样的问题。因此,一个可靠的解决方案是像这样imbue stringstream,并且您可以始终确保它有效:

std::ostringstream oss;
oss.imbue(std::locale::classic());
oss.precision(std::numeric_limits<double>::digits10);
oss << 0.15784465;

关于c++ - boost::lexical_cast<> 的语言环境不变保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18980423/

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