gpt4 book ai didi

c++ - 为什么当我将 std::locale 设置为 "zh_CN.UTF-8"时 std::istringstream 失败?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:45 56 4
gpt4 key购买 nike

代码如下:

#include <iostream>
#include <locale>
#include <sstream>

int main()
{
std::locale::global(std::locale("zh_CN.UTF-8"));

std::string str = u8"8086";
std::istringstream iss(str);
int e;
iss >> e;
if (iss.fail())
{
std::cout<<"failed "<<"e = "<<e<<std::endl;
}

return 0;
}

输出是:

failed  e = 8086

operator>> 成功了,但为什么 fail() 返回 true?


我在 centos7 中试过,fail() 返回了 false,但是当我在 macOS 中运行时,fail()返回 true?为什么?

-------------------- 环境--------------------

Apple LLVM version 9.0.0 (clang-900.0.38)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

最佳答案

这是一个 libc++ bug .即使数字中没有分组字符,它也会强制检查分组字符的位置。

目前,您可以添加分组字符来解决此问题,即改用 "8,086"

关于c++ - 为什么当我将 std::locale 设置为 "zh_CN.UTF-8"时 std::istringstream 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48606013/

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