You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用std::print输出std::wstring?

如何使用std::print输出std::wstring?

嘿,我来帮你搞定这个问题~你尝试的代码之所以会报错,核心原因是std::print默认绑定的是窄字符输出流std::cout,它没办法直接处理宽字符类型的std::wstring,类型不匹配自然就报错啦。

给你两个实用的解决办法,你可以根据自己的场景选:

  • 办法一:指定宽字符输出流来打印
    直接在std::print的第一个参数位置传入宽字符输出流std::wcout,这样就能和宽字符串的类型匹配上了,修改后的代码是这样的:

    #include <print>
    #include <string>
    #include <iostream>
    
    int main() {
        std::wstring s = L"something";
        std::print(std::wcout, L"{}", s);
    }
    
  • 办法二:把宽字符串转成窄字符串(适合内容是ASCII的场景)
    如果你的宽字符串里都是ASCII范围内的字符,也可以把它转换成普通的std::string再打印,不过要注意编码转换的问题,避免出现乱码:

    #include <print>
    #include <string>
    #include <locale>
    #include <codecvt>
    
    int main() {
        std::wstring s = L"something";
        // 宽字符串转窄字符串的工具
        std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
        std::string narrow_str = converter.to_bytes(s);
        std::print("{}", narrow_str);
    }
    

    这里要提个醒:std::codecvt在C17里已经被标记为弃用了,如果你用的是比较新的C标准,建议用<charconv>里的工具或者成熟的第三方编码库来做转换,会更稳妥。

另外还要注意,std::print是C23才引入的特性,你得确保编译器开启了C23的编译选项(比如Clang要加-std=c++23),不然也会出现编译错误哦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 13:43:02