gpt4 book ai didi

c++ - 无效的操作数二进制表达式:ostream 和 std::u32string

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:07 25 4
gpt4 key购买 nike

我正在尝试打印出 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 字符串不感兴趣。

最佳答案

C++ 标准库流类型是将字符类型作为第一个模板参数的模板。例如,std::ostream真的是std::basic_ostream<char> ,正如您从错误消息中看到的那样。一般来说,您可以发送 std::basic_string<T>std::basic_ostream<T> .但是std::u32stringstd::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++ 测试了这段代码。

关于c++ - 无效的操作数二进制表达式:ostream 和 std::u32string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24559994/

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