std::print 未被纳入 c++23 标准,提案 p2093 已推迟至 c++26;当前主流编译器均不支持,需用 fmt 库或 std::cout + std::format 替代。

std::print 在 C++23 中根本不能直接输出到控制台
因为 std::print 并未被纳入 C++23 标准。它曾作为 <print></print> 头文件的提案(P2093)进入 TS 和 C++23 的候选名单,但最终被推迟到 C++26。目前所有主流编译器(GCC 14、Clang 18、MSVC 19.39)均未实现 std::print,启用 -std=c++23 后仍会报错:‘print’ is not a member of ‘std’。
想用类似 print 的语法?得靠第三方或自己封装
如果你追求简洁、类型安全、无格式符的输出(比如 Python 风格),有几种现实可行路径:
- 用
fmt库(事实标准):安装后#include <fmt></fmt>,调用fmt::print("hello {}", 42)—— 它正是 P2093 的参考实现基础,且已支持 Windows 控制台 Unicode - 用
std::cout+std::format(C++20 起可用):std::cout ;注意 <code>std::format返回std::string,有临时对象开销 - 自己写轻量 wrapper(仅限简单场景):
template<typename... ts> void print(Ts&&... args) { ((std::cout —— 但不处理换行/缓冲/宽字符,慎用于生产</typename...>
为什么别等 std::print,现在就该关注 std::println
C++23 确实引入了 std::println(在 <print></print> 头中),但它只是个占位符:标准明确要求“<print></print> 头存在但不可用”,所有实现都把它设为 static_assert(false, "...") 或空头文件。你看到的任何“成功编译 std::println”案例,要么是用了非标准扩展(如 MSVC 的实验性 /experimental:module),要么混淆了 fmt::println。
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
真正能用的 C++23 控制台输出方案
目前最稳妥的组合是:
- 基础输出:坚持用
std::cout ,兼容性 100%,支持流操纵器和自定义 <code>operator - 格式化需求:搭配
std::format(C++20)+std::osyncstream(C++20,线程安全输出):std::osyncstream{std::cout} - 跨平台宽字符:Windows 上避免
std::wcout失效,需先调用_setmode(_fileno(stdout), _O_U16TEXT)(MSVC)或使用std::codecvt_utf8(已弃用,不推荐)
别把希望押在 std::print 上——它连 C++26 是否落地都还有变数,而控制台输出这种基础能力,稳定比时髦重要得多。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










