
C++20 引入了 std::format,这是一个现代化、类型安全且高效的格式化库,用于替代传统的 printf 和繁琐的 std::ostringstream 操作。它借鉴了 Python 的字符串格式化语法,使用起来更直观、更安全。
#include <format>
g++ -std=c++20 -fconcepts -O2 main.cpp
std::format 返回一个格式化后的字符串,而 std::print 直接输出到控制台(C++23 才正式加入,目前部分实现可用)。
立即学习“C++免费学习笔记(深入)”;
示例:基本格式化
#include <format><br>#include <iostream><br><br>int main() {<br> std::string name = "Alice";<br> int age = 30;<br> double height = 1.68;<br><br> std::string msg = std::format("姓名: {}, 年龄: {}, 身高: {:.2f}m", name, age, height);<br> std::cout << msg << std::endl;<br> // 输出: 姓名: Alice, 年龄: 30, 身高: 1.68m<br>}占位符使用 {},可指定参数索引、类型、宽度、精度、填充等。
std::format("{}, {}, {}", a, b, c)
std::format("{1}, {0}", "world", "hello") → "hello, world"
{name} 这样的命名参数格式说明符结构:{[index]:[fill][align][width][.precision][type]}
常见格式类型
{:d} 十进制{:x} 小写十六进制{:X} 大写十六进制{:o} 八进制{:b} 二进制{:.2f} 保留两位小数{:.3e} 科学计数法{:.0f} 不显示小数部分{:8} 右对齐,宽度为8{: 左对齐{:^8} 居中{:0>5} 左补0,右对齐{:*>5} 用 * 填充示例:格式控制
std::cout << std::format("|{:>8}|{:<8}|{:^8}|\n", "left", "right", "center");<br>// | left|right&&&| center |<br><br>std::cout << std::format("{:08x}", 255) << "\n"; // 000000ff<br>std::cout << std::format("{:.2f}", 3.14159) << "\n"; // 3.14要让自定义类型支持 std::format,需特化 std::formatter。
示例:格式化日期结构
struct Point {<br> double x, y;<br>};<br><br>template<><br>struct std::formatter<Point> {<br> constexpr auto parse(auto& ctx) {<br> return ctx.begin();<br> }<br><br> auto format(const Point& p, auto& ctx) const {<br> return std::format_to(ctx.out(), "({:.2f}, {:.2f})", p.x, p.y);<br> }<br>};<br><br>// 使用<br>Point p{1.234, 5.678};<br>std::cout << std::format("点坐标: {}", p) << "\n";<br>// 输出: 点坐标: (1.23, 5.68)parse 方法处理格式字符串(如支持 .2f),format 方法执行实际格式化。
基本上就这些。std::format 让 C++ 字符串格式化变得更简洁、更安全。虽然当前工具链支持还在完善中,但它是未来标准方式,值得尽早掌握。
以上就是c++++中如何格式化输出_C++20 std::format格式化库使用指南的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号