0

0

c++中如何格式化输出_C++20 std::format格式化库使用指南

尼克

尼克

发布时间:2025-09-29 17:31:02

|

866人浏览过

|

来源于php中文网

原创

C++20引入std::format,提供类型安全的现代化字符串格式化,替代printf和ostringstream。需编译器支持C++20(如GCC 13+、Clang 14+、MSVC 19.30+),头文件#include <format>,使用{}占位符支持索引、对齐、精度等控制,可自定义类型格式化,提升代码安全与可读性。

c++中如何格式化输出_c++20 std::format格式化库使用指南

C++20 引入了 std::format,这是一个现代化、类型安全且高效的格式化库,用于替代传统的 printf 和繁琐的 std::ostringstream 操作。它借鉴了 Python 的字符串格式化语法,使用起来更直观、更安全。

启用 std::format

注意:你需要编译器和标准库支持 C++20 并正确配置才能使用。
  • 编译器要求:
    • GCC 13+(早期版本需开启实验性支持)
    • Clang 14+(配合 libc++
    • MSVC 19.30+(Visual Studio 2022 17.0+)
  • 包含头文件:

    #include <format>

  • 编译选项示例(GCC/Clang):

    g++ -std=c++20 -fconcepts -O2 main.cpp

基本用法:std::format 和 std::print

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"
  • 命名参数(暂不支持):C++20 不支持如 {name} 这样的命名参数

格式说明符结构:{[index]:[fill][align][width][.precision][type]}

Sora
Sora

Sora是OpenAI发布的一种文生视频AI大模型,可以根据文本指令创建现实和富有想象力的场景。

下载

常见格式类型

  • 整数
    • {: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++ 字符串格式化变得更简洁、更安全。虽然当前工具链支持还在完善中,但它是未来标准方式,值得尽早掌握。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

887

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

461

2024.06.27

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

76

2023.06.20

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

306

2023.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号