Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

格式化库

GCC12.1.0尚不支持,使用fmt作为代替。

  • 定义头文件<format>
#pragma once
#define FMT_HEADER_ONLY
#include <fmt/format.h>
namespace std
{
    using fmt::format;
    using fmt::format_error;
    using fmt::formatter;
}
  • 并将其目录加到编译器头文件搜索路径,fmt库的include目录同样要加。
  • 然后就可以像他们就在标准库里那样用就可以了,等到编译器支持后,即可移除这些措施。

格式化

细节见标准格式说明

使用:result = std::format(format-str, args...)

格式字符串:{n:format-specifier}

  • 其中n为从0开始的序号,可以省略。
  • 省略时为自动索引,按顺序依次填充参数。
  • 不省略时为手动索引,格式化对应索引的参数。
  • 不允许混合自动和手动索引。

格式说明符[[fill] align] [sign] [#] [0] [width] [.precision] [type]

  • fill填充字符:单个字符,确保输出中的字段达到[width]的最小宽度。
  • align对齐:<^>分别表示左对齐(非整数和浮点数默认)、居中对齐、右对齐(整数浮点数默认)。如果未指定宽度,则[fill]align无效。
  • wdith输出字段宽度:一个值则表示宽度,如果是{}则使用下一个字段作为宽度,如果是{index}则使用索引字段作为输出宽度。
  • sign符号:-/+/space分别表示只显示负号(默认)、显示正号和负号、对负数使用负号整数使用空格。
  • #:启用备用格式规则。如果是整数会在格式化数字前插入0x 0X 0b 0B 0。如果是浮点数则备用格式始终输出十进制分隔符,即是后面没有数字。
  • type类型:
    • 整型:bBdoxX分别表示二进制、大写二进制(只备用格式使用0B)、十进制(未指定的默认) 八进制、十六进制、大写十六进制。
    • 浮点:
      • e E:用e E表示的科学计数法,按照给定精度或者默认精度6格式化。
      • f F:固定表示法,按照给定精度或者6。
      • g G:以e E表示指数的通用表示法,按照给定精度或者6格式化。
      • a A:小写或者大写的十六进制表示。
    • 布尔:sbBcdoxX,其中s以字符串形式输出true/false(布尔型默认),其他按整数或者字符格式输出。
    • 字符:cbBdoxX,其中c以字符形式输出(字符型默认),其他按整数格式输出。
    • 字符串:s,如果类型未指定,则默认使用s
    • 指针:p0x为前缀的十六进制表示法,如果类型未指定,指针默认用p
  • precision精度:
    • 只用于整数和浮点数。
    • 格式是.后跟浮点类型要输出的小数位数,或字符串要输出的字符数。
    • width一样,可以是另一组花括号,这种时候成为动态精度。
  • 0
    • 对于数值,填充到格式化结果中以达到[width]指定的最小宽度。
    • 插在数值前面,已经0x 0X 0b ...后面。
    • 如果指定了对齐则忽略本选项。

错误格式:抛出std::format_errorfmt库很多时候会直接编不过。

支持自定义类型:特化std::formatter,细节略,见std::formatter