print / println
std::print 和 std::println 是 C++23 引入的格式化输出函数,将 std::format 的格式化能力直接绑定到标准输出。它比 std::cout 更简洁,比 printf 类型安全。
头文件与基本特征
#include <print>
| 特征 | 说明 |
|---|---|
| 格式化 | 同 std::format 语法 |
| 线程安全 | 对同一流的输出不交错 |
| 换行 | println 自动追加 \n |
| 与 cout 混用 | 需注意流同步 |
基本用法
#include <print>
int main() {
std::println("Hello, {}!", "world"); // Hello, world!
std::println("{} + {} = {}", 1, 2, 3); // 1 + 2 = 3
// 格式说明符
std::println("pi ≈ {:.3f}", 3.14159); // pi ≈ 3.142
std::println("hex: {:#x}", 255); // hex: 0xff
return 0;
}
对比旧方式
// C 风格:不安全
printf("value = %d\n", 42);
// C++11 风格:冗长
std::cout << std::format("value = {}\n", 42);
// C++23:简洁安全
std::println("value = {}", 42);
常用接口
| 函数 | 作用 |
|---|---|
print(fmt, args...) | 格式化输出(不加换行) |
println(fmt, args...) | 格式化输出 + 换行 |
println() | 输出空行 |
print(stream, fmt, args...) | 输出到指定流(如文件) |
使用注意
print/println对同一流的每次调用是原子的(不交错),适合多线程日志。- 和
cout混用时,要确保同步设置正确。 - 编译器支持:GCC 14+ / Clang 17+ / MSVC 17.x+。
小结
std::print / std::println 让 C++ 的输出终于赶上了 Python 和 Rust 的体验。新项目里可以逐步用它们替代 cout << 和 printf。