我正在尝试打印出std::u32string
,但我不断收到编译错误:
error: invalid operands to binary expression
('ostream' (aka 'basic_ostream<char>') and 'std::u32string' (aka
'basic_string<char32_t>'))
我的代码由以下内容组成:
std::u32string test = U"hello";
std::cout << test << std::endl;
有谁知道打印u32string的正确方法是什么? 我对使用普通字符串或wchar字符串不感兴趣。
答案 0 :(得分:1)
C ++标准库流类型是模板,其中字符类型作为第一个模板参数。例如,std::ostream
实际上是std::basic_ostream<char>
,您可以从错误消息中看到。通常,您可以向std::basic_string<T>
发送std::basic_ostream<T>
。但std::u32string
为std::basic_string<char32_t>
,因此类型不匹配。
不幸的是,std::u32cout
类似std::basic_ostream<char32_t>
或类似的东西,所以您唯一的选择是将您的UTF-32编码字符串转换为其他编码。
以下代码使用std::wstring_convert
将UTF-32编码的字符串转换为UTF-8。 UTF-8字符串可以直接打印到std::cout
。
std::u32string test = U"hello";
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> cv;
std::cout << cv.to_bytes(test) << std::endl;
请注意,codecvt尚未在libstdc ++中实现。我使用clang / libc ++测试了这段代码。