讲师中心 微信公众号
AI工具推荐 视频效率加速

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

夜杰大大_2511

夜杰大大_2511

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

|

946人浏览过

|

来源于php中文网

原创

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

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></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]}

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载

常见格式类型

  • 整数:
    • {: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工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

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

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

3340

2023.09.27

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

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

269

2026.02.03

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

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

1829

2023.07.31

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

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

1231

2024.06.27

printf用法大全
printf用法大全

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

908

2023.06.20

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

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

1029

2023.11.28

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

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

1898

2023.08.03

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

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

3064

2023.09.04

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn