[原创](Modern C++)现代C++的关键性概念: <format>标准库提供的格式化std::format

常用网名: 猪头三
出生日期: 1981.XX.XX
企鹅交流: 643439947
个人网站: 80x86汇编小站
编程生涯: 2001年~至今[共24年]
职业生涯: 22年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
在C++20中, 引入了<format>标准库, 它提供了一种强大且直观的方式来格式化字符串. 在传统C++中, 通常使用std::cout和std::printf进行输出格式化. 然而printf风格的格式化方式存在可读性差、类型安全性低等问题, 而std::ostringstream的方式又较为冗长. C++20的std::format结合了两者的优势, 使得格式化字符串既灵活又安全, 提升了开发体验. 

[代码示例]

#include <iostream>
#include <format>
#include <chrono>int main()
{// 标准库format的几种常见用法// 用法1: 基本字符串格式化std::wcout << std::format(L"Hello, {}", L"World") << std::endl;/* 解释: 这里使用 {} 作为占位符, 然后在 format 函数中传入 "World" 作为参数来替换占位符. 输出结果为: Hello, World */// 用法2: 整型数字格式化(10进制、8进制、16进制和2进制)std::wcout << std::format(L"{:d} {:o} {:x} {:b}", 10, 10, 10, 10) << std::endl;/* 解释: 使用 :d、:o、:x 和 :b 来分别指定输出的整型数字格式为10进制、8进制、16进制和2进制. 输出结果为: 10 12 a 1010 */// 用法3: 指定顺序处理参数的格式化(索引从0开始)std::wcout << std::format(L"{3:d} {2:o} {1:x} {0:b}", 10, 11, 12, 13) << std::endl;/* 解释: 通过在 {} 中指定参数的索引号来控制输出顺序. 输出结果为: 13 14 b 1010 */// 用法4: 单一参数可以被重复利用进行格式化std::wcout << std::format(L"{0:d} {0:o} {0:x} {0:b}", 10) << std::endl;/* 解释: 一个参数可以在多个 {} 中使用, 通过指定不同的格式化规则来输出不同格式的结果. 输出结果为: 10 12 a 1010 */// 用法5: 浮点数格式化(科学记数法、十六进制浮点数、定点和默认)std::wcout << std::format(L"{0:} {0:e} {0:a} {0:f} {0:g}", 3.14159265358979323846) << std::endl;/* 解释: 通过指定不同的格式化规则来输出不同类型的浮点数. 输出结果为: 3.141592653589793 3.141593e+00 1.921fb54442d18p+1 3.141593 3.14159 */// 用法6: 浮点数格式化(精度控制)std::wcout << std::format(L"{:.8}", 3.14159265358979323846) << std::endl;/* 解释: 通过在 : 后面指定数字来控制输出的小数位数. 输出结果为: 3.1415927 */// 用法7: 日期格式化using namespace std::chrono;auto date_YMD = 2021y / March / 30;std::wcout << std::format(L"{:%A %B %d, %Y}", sys_days{ date_YMD }) << std::endl;/* 解释: 使用 %Y、%m、%d 等格式化规则来输出日期. 输出结果为: Tuesday March 30, 2021 */return 0;
}

[总结]
C++20的<format>库提供了一种现代化的格式化方式, 相比于printf和ostringstream, 它具有如下优势: 
类型安全: 自动推断参数类型, 避免格式错误.
可读性强: 使用占位符{}代替printf的%格式, 代码更直观.
支持多种数据类型: 可格式化整数、浮点数、字符串、日期等.
灵活的格式控制: 支持进制转换、浮点数精度控制、顺序指定等.
高效: 底层优化后, 性能优于传统的ostringstream方式.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 DMA+AD多通道

接线图 代码配置 ADC单次扫描DMA单次转运模式 uint16_t AD_Value[4]; //DMAAD多通道 void DMA_Config(void) {//定义结构体变量 GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体变量 ADC_InitTypeDef ADC_InitStructure; //定义ADC结构体变量 DMA_InitTypeDef DMA_In…

浅谈《图解HTTP》

感悟 滑至尾页的那一刻&#xff0c;内心突兀的涌来一阵畅快的感觉。如果说从前对互联网只是懵懵懂懂&#xff0c;但此刻却觉得她是如此清晰而可爱的呈现在哪里。 介绍中说&#xff0c;《图解HTTP》适合作为第一本网络协议书。确实&#xff0c;它就像一座桥梁&#xff0c;连接…

Alibaba开发规范_异常日志之日志规约:最佳实践与常见陷阱

文章目录 引言1. 使用SLF4J日志门面规则解释代码示例正例反例 2. 日志文件的保存时间规则解释 3. 日志文件的命名规范规则解释代码示例正例反例 4. 使用占位符进行日志拼接规则解释代码示例正例反例 5. 日志级别的开关判断规则解释代码示例正例反例 6. 避免重复打印日志规则解释…

自动化软件测试的基本流程

一、自动化测试的准备 1.1 了解测试系统 首先对于需要测试的系统我们需要按照软件需求说明书明确软件功能。这里以智慧养老系统作为案例进行测试&#xff0c;先让我们看看该系统的登录界面和用户管理界面。 登录界面&#xff1a; 登录成功默认界面&#xff1a; 用户管理界面…

Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)

文章目录 一、环境准备二、安装Ollama2.1 访问Ollama官方网站2.2 下载适用于Windows的安装包2.3 安装Ollama安装包2.4 指定Ollama安装目录2.5 指定Ollama的大模型的存储目录 三、选择DeepSeek R1模型四、下载并运行DeepSeek R1模型五、常见问题解答六、使用Chatbox进行交互6.1 …

Android 深入探究 JSONObject 与 JSONArray:Android 中的数据解析与数组操作全解析

在现代软件开发中&#xff0c;数据的传输和存储形式多种多样&#xff0c;而 JSON&#xff08;JavaScript Object Notation&#xff09;以其简洁、易读、便于解析的特点&#xff0c;成为了最常用的数据格式之一。在 Android 开发中&#xff0c;JSONObject和JSONArray同样是处理 …

机器学习day5

自定义数据集 使用tensorflow框架实现逻辑回归并保存模型&#xff0c;然后保存模型后再加载模型进行预测 代码 import tensorflow as tf import numpy as np# 1. 自定义数据集 data [[-0.5, 7.7], [1.8, 98.5], [0.9, 57.8], [0.4, 39.2], [-1.4, -15.7], [-1.4, -37.3], [-1…

计算机网络中常见高危端口有哪些?如何封禁高危端口?

保障网络安全&#xff0c;从封禁高危端口开始&#xff01; 在计算机网络中&#xff0c;端口是设备与外界通信的“大门”&#xff0c;但某些端口因常被黑客利用而成为高危入口。封禁这些端口是防御网络攻击的关键一步。本文将详解 10个常见高危端口&#xff0c;并提供多平台封禁…

ZK-ALU-在有限域上实现左移

先看在实数域上实现左移, 再看在有限域上的实现 左移-整数 计算机中的左移计算&#xff08;<< 操作&#xff09;通常由处理器的硬件电路直接支持&#xff0c;因此效率非常高。在编程语言中&#xff0c;左移操作可以通过位移运算符&#xff08;例如 C/C 中的 <<&a…

CommonJS

CommonJS 是由 JavaScript 社区于 2oo9 年提出的包含模块、文件、IO、控制台在内的一系列标准。Node.js 的实现中采用了 CommonJS 标准的一部分&#xff0c;并在其基础上进行了一些调整。我们所说的 CommonJS 模块和 Node.js 中的实现并不完全一样&#xff0c;现在一般谈到 Com…

android java 用系统弹窗的方式实现模拟点击动画特效

接上一篇&#xff1a;android java系统弹窗的基础模板-CSDN博客 本篇记录的是系统弹窗的一个应用示例&#xff1a;实现点击动画效果 首先模拟点击的实现参考&#xff1a;android模拟点击_motionevent upevent motionevent.obtain(systemclo-CSDN博客 动画效果&#xff0c;是…

基于最近邻数据进行分类

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 完整代码&#xff1a; import torch import numpy as np from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt# 生成一个简单的数据…

[SAP ABAP] ABAP SQL跟踪工具

事务码ST05 操作步骤 步骤1&#xff1a;使用事务码ST05之前&#xff0c;将要检测的程序生成的页面先呈现出来&#xff0c;这里我们想看下面程序的取数操作&#xff0c;所以停留在选择界面 步骤2&#xff1a; 新建一个GUI窗口&#xff0c;输入事务码ST05&#xff0c;点击 Acti…

算法的时间复杂度

什么是时间复杂度&#xff1f; 算法的时间复杂度是算法的执行效率 算法的执行时间和算法输入值之间的关系&#xff0c;与函数中代码的执行次数有关。 常见的时间复杂度案例分析&#xff1a; O(1) 算法的执行时间和输入值无关 O(logn) 算法的执行时间和代码的执行次数呈log…

蓝桥杯备考:高精度算法之除法

我们除法的高精度其实也不完全是高精度&#xff0c;而是一个高精度作被除数除以一个低精度 模拟我们的小学除法 由于题目中我们的除数最大是1e9&#xff0c;当它真正是1e9的时候&#xff0c;t是有可能超过1e9的&#xff0c;所以要用long long

重新刷题求职2-DAY1

DAY1 1.704. 二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 最普通的二分查找&#xff0c;查用的习惯左闭右…

算法竞赛(Python)-堆栈

文章目录 一 基础知识二 题目有效的括号字符串解码 一 基础知识 堆栈&#xff08;Stack&#xff09;&#xff1a;简称为栈。一种线性表数据结构&#xff0c;是一种只允许在表的一端进行插入和删除操作的线性表。   我们把栈中允许插入和删除的一端称为 「栈顶&#xff08;top…

SpringBoot 中的测试jar包knife4j(实现效果非常简单)

1、效果图 非常快的可以看见你实现的接口 路径http://localhost:8080/doc.html#/home 端口必须是自己的 2、实现效果 2.1、导入jar包 <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-jakarta-spring-boot-star…

16.1.STM32F407ZGT6-CAN基础概念

参考&#xff1a; https://blog.csdn.net/sunlight_vip/article/details/128639144 前言&#xff1a; 学习总结CAN的知识点&#xff1a; 1.can是什么&#xff0c;历史由来和背景 2.can的物理层&#xff0c;链路层 3.初始化的流程和关键点 4.波特率怎么设置 5.can id怎么过滤 6…

Linux环境下的Java项目部署技巧:Nginx 详解

Nginx 的启动 Nginx 启动会生成 2 个进程&#xff1a;主进程与守护进程 主进程&#xff1a;常用于提供反向代理服务。特点&#xff1a;占内存大守护进程&#xff1a;防止主进程以外关闭。特点&#xff1a;占内存小 Nginx 启动需要占用 80 端口: 当 Ngnix 启动失败时&#xff0…