本文仅为参考,请以官方文档为准。
水平有限,欢迎指正。有兴趣,参阅 官方文档。
本文仅为参考,请以 实际情况 为准。
正文本文将介绍 fmt::format()和fmt::print()之类的格式化函数使用
A、格式化字符串有占位符,用大括号 {}表示占位,格式化字符串放在{}中间。没有放在{}之间的字符串被视为字符串输出。 如果需要输出的字符串中有大括号{},可以额外增加一个大括号来实现。例如:{ { 和 } }
B、占位符语法如下:
replacement_field :: = "{"[arg_id][":" format_spec] "}" arg_id :: = integer | identifier integer :: = digit + digit :: = "0"..."9" identifier :: = id_start id_continue* id_start :: = "a"..."z" | "A"..."Z" | "_" id_continue :: = id_start | digit1、替换字段可用以 arg_id 开头,该参数指定要格式化其值并将其插入输出的参数,而不是替换字段。可选的arg_id放在format_spec的后面,其后是冒号\':\'。这些指定替换值的非默认格式。
2、如果格式字符串中的数字arg_ids依次为0、1、2,...,则可以全部省略(不只是某些数字),数字0、1、2,...将按此顺序自动插入。
3、命名参数可以通过其名称或索引来引用。例如:
"First, thou shalt count to {0}" // 替换第一个参数 "Bring me a {}" // 隐式引用第一个参数 "From {} to {}" // 这行代码和 "From {0} to {1}"功效相同4、format_spec 字段包含有关如何显示值的规范,包括字段宽度,对齐方式,填充,小数精度等详细信息。每种值类型都可以定义自己的“formatting mini - language”或对format_spec的解释。
5、大多数内置类型都支持通用的formatting mini - language,这将在下一节中进行介绍。
6、format_spec字段还可以在其中的某些位置包含嵌套的替换字段。这些嵌套的替换字段只能包含一个参数id。格式规格是不允许的。这将允许动态指定值的格式。
C、Mini - Language的格式规范
1、在格式字符串中包含的替换字段中使用“格式规范”来定义如何显示单个值。每种格式表类型可以定义如何解释格式规范。
2、 尽管某些格式化选项仅受数字类型支持,但大多数内置类型都为格式规范实现了以下选项。
3、标准格式说明符的一般形式为:
format_spec :: = [[fill]align][sign]["#"]["0"][width]["." precision][type] fill :: = <a character other than \'{\' or \'}\'> align :: = "<" | ">" | "^" sign :: = "+" | "-" | " " width :: = integer | "{"[arg_id] "}" precision :: = integer | "{"[arg_id] "}" type :: = int_type | "a" | "A" | "c" | "e" | "E" | "f" | "F" | "g" | "G" | "L" | "p" | "s" int_type :: = "b" | "B" | "d" | "o" | "x" | "X"4、填充字符可以是\'{\'或\'}\'以外的任何Unicode代码点。填充字符的存在由其后的字符表示,该字符必须是对齐选项之一。如果format_spec的第二个字符不是有效的对齐选项,则假定填充字符和对齐选项都不存在。
5、各种对齐选项的含义如下:
Option Meaning
\'<\' 强制字段在可用空间内左对齐((大多数对象的默认设置).
\'>\' 强制字段在可用空间内右对齐(这是数字的默认设置).
\'^\' 强制字段在可用空间内居中.
6、请注意,除非定义了最小字段宽度,否则字段宽度将始终与填充它的数据大小相同。因此在这种情况下,对齐选项没有任何意义。
7、符号选项仅对数字类型有效,并且可以是以下之一:
Option Meaning
\'+\' 表示正负数均应使用符号,例如: + 5, - 2。
\'-\' 表示符号只能用于负数(负数默认设置显示)。
space 表示应在正数上使用前导空格,在负数上使用减号。
8、“#”选项使“替代形式”用于转换。替代形式对于不同类型的定义不同。此选项仅对整数和浮点类型有效。对于整数,使用二进制,八进制或十六进制输出时,此选项将前缀“ 0b”(“ 0B”),“ 0”或“ 0x”(“ 0X”)添加到输出值。前缀是小写还是大写取决于类型说明符的大小写,例如,前缀“ 0x”用于类型“ x”,“ 0X”用于“ X”。对于浮点数,替代格式会导致转换结果始终包含小数点字符,即使后面没有数字也是如此。通常,只有在数字后面跟随小数点字符,这些转换的结果才会出现。另外,对于“ g”和“ G”转换,不会从结果中删除部零。
9、width是定义最小字段宽度的十进制整数。如果未指定,则字段宽度将由内容确定。
10、在宽度字段前面加上零(\'0\'),字符可启用数字类型的符号识别0填充.它强制将填充内容放置在符号或基数(如果有)之后但在数字之前。这用于以“ + 000000120”形式打印字段。此选项仅对数字类型有效,并且对无穷大和NaN的格式无效。