gpt4 book ai didi

c++ - 无法从 basic_stringstream 读取 char8_t

转载 作者:行者123 更新时间:2023-12-01 18:36:07 24 4
gpt4 key购买 nike

我只是尝试使用 UTF-8 格式的 stringstream:

#include<iostream>
#include<string>
#include<sstream>
int main()
{
std::basic_stringstream<char8_t> ss(u8"hello");
char8_t c;
std::cout << (ss.rdstate() & std::ios_base::goodbit) << " " << (ss.rdstate() & std::ios_base::badbit) << " "
<< (ss.rdstate() & std::ios_base::failbit) << " " << (ss.rdstate() & std::ios_base::eofbit) << "\n";
ss >> c;
std::cout << (ss.rdstate() & std::ios_base::goodbit) << " " << (ss.rdstate() & std::ios_base::badbit) << " "
<< (ss.rdstate() & std::ios_base::failbit) << " " << (ss.rdstate() & std::ios_base::eofbit) << "\n";
std::cout << c;
return 0;
}

编译使用:

g++-9 -std=c++2a -g -o bin/test test/test.cpp

屏幕上的结果是:

0 0 0 0
0 1 4 0
0

读取c时似乎出了问题,但我不知道如何纠正。请帮助我!

最佳答案

这实际上是一个老问题,并不特定于支持 char8_tchar16_t 也会出现同样的问题或char32_t在 C++11 及更高版本中。下面的 gcc bug 报告有一个类似的测试用例。

该问题还在以下讨论中:

问题是 gcc 不会隐式地将 ctype<char8_t> 的方面注入(inject)到全局语言环境中。 , ctype<char16_t> ,或ctype<char32_t> 。当尝试执行需要这些方面之一的操作时,std::bad_caststd::__check_facet 抛出异常(随后被为字符提取操作符创建的 IOS 哨兵对象默默吞没,然后设置 badbitfailbit )。

C++ 标准仅要求 ctype<char>ctype<wchar_t>提供。请参阅[locale.category]p2 .

关于c++ - 无法从 basic_stringstream<char8_t> 读取 char8_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57406448/

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