584 lines
63 KiB
HTML
584 lines
63 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>std::formatter</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_utility_format_formatter skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::</span>formatter</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-utility.html">utility</a>‎ | <a href="cpp-utility-format.html">format</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="cpp-header-format.html"><format></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> CharT <span class="sy1">=</span> <span class="kw4">char</span><span class="sy1">></span><br />
|
|
<span class="kw1">struct</span> formatter<span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><code>formatter</code> 的被启用特化对给定类型定义格式化规则。被启用特化必须满足<a href="cpp-named_req-Formatter.html"><span style="font-style:italic">格式化器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(Formatter)</span></a> 要求。尤其是它们定义可调用实体 <code>parse</code> 与 <code>format</code> 。</p>
|
|
<p>对每组未对其启用特化 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">formatter</span><span class="sy1"><</span>T, CharT<span class="sy1">></span></span></span> 的类型 <code>T</code> 与 <code>CharT</code> ,该特化是完整类型且被禁用。</p>
|
|
<p>被禁用特化不满足<a href="cpp-named_req-Formatter.html"><span style="font-style:italic">格式化器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(Formatter)</span></a> 要求,且下列值均为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">false</span></span></span> :</p>
|
|
<ul>
|
|
<li><span class="t-lc"><a href="cpp-types-is_default_constructible.html">std::is_default_constructible_v</a></span></li>
|
|
<li><span class="t-lc"><a href="cpp-types-is_copy_constructible.html">std::is_copy_constructible_v</a></span></li>
|
|
<li><span class="t-lc"><a href="cpp-types-is_move_constructible.html">std::is_move_constructible_v</a></span></li>
|
|
<li><span class="t-lc"><a href="cpp-types-is_copy_assignable.html">std::is_copy_assignable_v</a></span></li>
|
|
<li><span class="t-lc"><a href="cpp-types-is_move_assignable.html">std::is_move_assignable_v</a></span></li>
|
|
</ul>
|
|
<h3><span class="mw-headline" id=".E5.AF.B9.E5.9F.BA.E6.9C.AC.E7.B1.BB.E5.9E.8B.E5.92.8C.E5.AD.97.E7.AC.A6.E4.B8.B2.E7.B1.BB.E5.9E.8B.E7.9A.84.E6.A0.87.E5.87.86.E7.89.B9.E5.8C.96">对基本类型和字符串类型的标准特化</span></h3>
|
|
<p>以下列表中, <code>CharT</code> 为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char</span></span></span> 或 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">wchar_t</span></span></span> , <code>ArithmeticT</code> 是任何 cv 无限定的算术类型,除了 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char</span></span></span>、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">wchar_t</span></span></span>、 <span class="t-c"><span class="mw-geshi cpp source-cpp">char8_t</span></span>、 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char16_t</span></span></span> 或 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char32_t</span></span></span> 。</p>
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><></span> <span class="kw1">struct</span> formatter<span class="sy1"><</span><span class="kw4">char</span>, <span class="kw4">char</span><span class="sy1">></span><span class="sy4">;</span><br /></span>
|
|
<p><span class="kw1">template</span><span class="sy1"><></span> <span class="kw1">struct</span> formatter<span class="sy1"><</span><span class="kw4">char</span>, <span class="kw4">wchar_t</span><span class="sy1">></span><span class="sy4">;</span><br />
|
|
<span class="kw1">template</span><span class="sy1"><></span> <span class="kw1">struct</span> formatter<span class="sy1"><</span><span class="kw4">wchar_t</span>, <span class="kw4">wchar_t</span><span class="sy1">></span><span class="sy4">;</span><br />
|
|
<br />
|
|
<span class="kw1">template</span><span class="sy1"><></span> <span class="kw1">struct</span> formatter<span class="sy1"><</span>CharT<span class="sy2">*</span>, CharT<span class="sy1">></span><span class="sy4">;</span><br />
|
|
<span class="kw1">template</span><span class="sy1"><></span> <span class="kw1">struct</span> formatter<span class="sy1"><</span><span class="kw4">const</span> CharT<span class="sy2">*</span>, CharT<span class="sy1">></span><span class="sy4">;</span><br />
|
|
<span class="kw1">template</span><span class="sy1"><</span><a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> N<span class="sy1">></span> <span class="kw1">struct</span> formatter<span class="sy1"><</span><span class="kw4">const</span> CharT<span class="br0">[</span>N<span class="br0">]</span>, CharT<span class="sy1">></span><span class="sy4">;</span><br />
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Traits, <span class="kw1">class</span> Alloc<span class="sy1">></span><br />
|
|
<span class="kw1">struct</span> formatter<span class="sy1"><</span><a href="cpp-string-basic_string.html"><span class="kw1228">std::<span class="me2">basic_string</span></span></a><span class="sy1"><</span>CharT, Traits, Alloc<span class="sy1">></span>, CharT<span class="sy1">></span><span class="sy4">;</span><br />
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Traits<span class="sy1">></span><br />
|
|
<span class="kw1">struct</span> formatter<span class="sy1"><</span><a href="cpp-string-basic_string_view.html"><span class="kw1246">std::<span class="me2">basic_string_view</span></span></a><span class="sy1"><</span>CharT, Traits<span class="sy1">></span>, CharT<span class="sy1">></span><span class="sy4">;</span><br />
|
|
<br />
|
|
<span class="kw1">template</span><span class="sy1"><></span> <span class="kw1">struct</span> formatter<span class="sy1"><</span>ArithmeticT, CharT<span class="sy1">></span><span class="sy4">;</span><br />
|
|
<br />
|
|
<span class="kw1">template</span><span class="sy1"><></span> <span class="kw1">struct</span> formatter<span class="sy1"><</span><a href="cpp-types-nullptr_t.html"><span class="kw102">std::<span class="me2">nullptr_t</span></span></a>, CharT<span class="sy1">></span><span class="sy4">;</span><br />
|
|
<span class="kw1">template</span><span class="sy1"><></span> <span class="kw1">struct</span> formatter<span class="sy1"><</span><span class="kw4">void</span><span class="sy2">*</span>, CharT<span class="sy1">></span><span class="sy4">;</span><br /></p>
|
|
<span class="kw1">template</span><span class="sy1"><></span> <span class="kw1">struct</span> formatter<span class="sy1"><</span><span class="kw4">const</span> <span class="kw4">void</span><span class="sy2">*</span>, CharT<span class="sy1">></span><span class="sy4">;</span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>对其他指针和指向成员指针的格式化器被禁用。</p>
|
|
<p>如 <code>std::formatter<wchar_t, char></code> 和 <code>std::formatter<const char*, wchar_t></code> 这些会要求编码转换的特化被禁用。</p>
|
|
<h4><span class="mw-headline" id=".E6.A0.87.E5.87.86.E6.A0.BC.E5.BC.8F.E8.AF.B4.E6.98.8E">标准格式说明</span></h4>
|
|
<p>对于基本类型和字符串类型,格式说明基于 <a rel="nofollow" class="external text" href="https://docs.python.org/3/library/string.html#formatspec">Python 中的格式说明</a>。</p>
|
|
<p>格式说明的语法是:</p>
|
|
<table class="t-sdsc-begin">
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td class="t-sdsc-nopad"><span class="t-spar">填充与对齐</span><span class="t-mark">(可选)</span> <span class="t-spar">符号</span><span class="t-mark">(可选)</span> <code><b>#</b></code><span class="t-mark">(可选)</span> <code><b>0</b></code><span class="t-mark">(可选)</span> <span class="t-spar">宽度</span><span class="t-mark">(可选)</span> <span class="t-spar">精度</span><span class="t-mark">(可选)</span> <code><b>L</b></code><span class="t-mark">(可选)</span> <span class="t-spar">类型</span><span class="t-mark">(可选)</span></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<p><span class="t-spar">符号</span> 、 <code><b>#</b></code> 及 <code><b>0</b></code> 选项仅当使用整数或浮点显示类型时合法。</p>
|
|
<h5><span class="mw-headline" id=".E5.A1.AB.E5.85.85.E4.B8.8E.E5.AF.B9.E9.BD.90">填充与对齐</span></h5>
|
|
<p><span class="t-spar">填充与对齐</span> 是一个可选的<i>填充</i>字符(可为任何 <code><b>{</b></code> 或 <code><b>}</b></code> 外的的字符),后随<i>对齐</i>选项 <code><b><</b></code> 、 <code><b>></b></code> 、 <code><b>^</b></code> 之一。<i>对齐</i>选项的意义如下:</p>
|
|
<ul>
|
|
<li><code><b><</b></code> :强制域对齐到可用空间起始。这在使用非整数非浮点显示类型时为默认。</li>
|
|
<li><code><b>></b></code> :强制域对齐到可用空间末尾。这在使用整数或浮点显示类型时为默认。</li>
|
|
<li><code><b>^</b></code> :强制域在可用空间中央,通过在值的前面插入 <span class="texhtml" style="white-space: nowrap;">⌊<span class="t-mfrac"></span></span>
|
|
<table>
|
|
<tr>
|
|
<td>n</td>
|
|
</tr>
|
|
<tr>
|
|
<td>2</td>
|
|
</tr>
|
|
</table>
|
|
⌋ 个字符,后面插入 <span class="texhtml" style="white-space: nowrap;">⌈<span class="t-mfrac"></span></span>
|
|
<table>
|
|
<tr>
|
|
<td>n</td>
|
|
</tr>
|
|
<tr>
|
|
<td>2</td>
|
|
</tr>
|
|
</table>
|
|
⌉ 个字符,其中 <span class="texhtml" style="white-space: nowrap;">n</span> 是待插入的总字符数。</li>
|
|
</ul>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw4">char</span> c <span class="sy1">=</span> <span class="nu0">120</span><span class="sy4">;</span>
|
|
<span class="kw4">auto</span> s0 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:6}"</span>, <span class="nu0">42</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s0 的值为 " 42"</span>
|
|
<span class="kw4">auto</span> s1 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:6}"</span>, <span class="st0">'x'</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s1 的值为 "x "</span>
|
|
<span class="kw4">auto</span> s2 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:*<6}"</span>, <span class="st0">'x'</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s2 的值为 "x*****"</span>
|
|
<span class="kw4">auto</span> s3 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:*>6}"</span>, <span class="st0">'x'</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s3 的值为 "*****x"</span>
|
|
<span class="kw4">auto</span> s4 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:*^6}"</span>, <span class="st0">'x'</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s4 的值为 "**x***"</span>
|
|
<span class="kw4">auto</span> s5 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:6d}"</span>, c<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s5 的值为 " 120"</span>
|
|
<span class="kw4">auto</span> s6 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:6}"</span>, <span class="kw2">true</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s6 的值为 "true "</span></pre></div>
|
|
</div>
|
|
<h5><span class="mw-headline" id=".E7.AC.A6.E5.8F.B7.E3.80.81_.23_.E4.B8.8E_0">符号、 # 与 0</span></h5>
|
|
<p><span class="t-spar">符号</span> 选项能为下列之一:</p>
|
|
<ul>
|
|
<li><code><b>+</b></code> :指示符号应该一同用于非负数和负数。在非负数的输出值前插入 <code>+</code> 号。</li>
|
|
<li><code><b>-</b></code> :指示符号应该仅用于负数(这是默认行为)。</li>
|
|
<li>空格:指示应对非负数使用前导空格,而对负数使用负号。</li>
|
|
</ul>
|
|
<p>负零被当作负数。</p>
|
|
<p><span class="t-spar">符号</span> 选项应用于浮点无穷大和 NaN 。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw4">double</span> inf <span class="sy1">=</span> <a href="cpp-types-numeric_limits.html"><span class="kw344">std::<span class="me2">numeric_limits</span></span></a><span class="sy1"><</span><span class="kw4">double</span><span class="sy1">></span><span class="sy4">::</span><span class="me2">infinity</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">double</span> nan <span class="sy1">=</span> <a href="cpp-types-numeric_limits.html"><span class="kw344">std::<span class="me2">numeric_limits</span></span></a><span class="sy1"><</span><span class="kw4">double</span><span class="sy1">></span><span class="sy4">::</span><span class="me2">quiet_NaN</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">auto</span> s0 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{0:},{0:+},{0:-},{0: }"</span>, <span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s0 的值为 "1,+1,1, 1"</span>
|
|
<span class="kw4">auto</span> s1 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{0:},{0:+},{0:-},{0: }"</span>, <span class="sy2">-</span><span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s1 的值为 "-1,-1,-1,-1"</span>
|
|
<span class="kw4">auto</span> s2 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{0:},{0:+},{0:-},{0: }"</span>, inf<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s2 的值为 "inf,+inf,inf, inf"</span>
|
|
<span class="kw4">auto</span> s3 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{0:},{0:+},{0:-},{0: }"</span>, nan<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s3 的值为 "nan,+nan,nan, nan"</span></pre></div>
|
|
</div>
|
|
<p><code><b>#</b></code> 选项导致将<i>替用形式</i>用于转换。</p>
|
|
<ul>
|
|
<li>对于整数类型,使用二进制、八进制或十六进制显示类型时,替用形式插入前缀( <code>0b</code> 、 <code>0</code> 或 <code>0x</code> )到输出值中,若有符号则于符号(可为空格)前,否则于输出值前。</li>
|
|
<li>对于浮点类型,替用形式导致有限值的转换结果始终含有小数点字符,即使其后无数位。正常情况下,小数点字符仅若有数位后随它才出现于转换结果。另外,对于 <code><b>g</b></code> 与 <code><b>G</b></code> 转换,不从结果移除尾随的零。</li>
|
|
</ul>
|
|
<p><code><b>0</b></code> 选项以前导零填充域(后随任何符号或底)到域宽,除了应用到无穷大或 NaN 时。若 <code>0</code> 字符与<i>对齐</i>选项一同出现,则忽略 <code>0</code> 字符。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw4">char</span> c <span class="sy1">=</span> <span class="nu0">120</span><span class="sy4">;</span>
|
|
<span class="kw4">auto</span> s1 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:+06d}"</span>, c<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s1 的值为 "+00120"</span>
|
|
<span class="kw4">auto</span> s2 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:#06x}"</span>, <span class="nu12">0xa</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s2 的值为 "0x000a"</span>
|
|
<span class="kw4">auto</span> s3 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:<06}"</span>, <span class="sy2">-</span><span class="nu0">42</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s3 的值为 "-42 " (因 < 对齐忽略 0 )</span></pre></div>
|
|
</div>
|
|
<h5><span class="mw-headline" id=".E5.AE.BD.E5.BA.A6.E4.B8.8E.E7.B2.BE.E5.BA.A6">宽度与精度</span></h5>
|
|
<p><span class="t-spar">宽度</span> 为正十进制数,或嵌套的替换域( <code><b>{}</b></code> 或 <code><b>{</b></code><i>n</i><code><b>}</b></code> )。宽度若存在则指定最小域宽。</p>
|
|
<p><span class="t-spar">精度</span> 为点( <code><b>.</b></code> )后随非负十进制数或嵌套的替换域。此域指示精度或最大域大小。它仅能用于浮点与字符串类型。对于浮点类型,此域指定格式化精度。对于字符串类型,它提供要复制到输出的字符串前缀的估计宽度(见后述)的上界。对于以 Unicode 编码的字符串,复制到输出的文本是整个扩展字素集群的,使得估计宽度不大于精度的最长前缀。</p>
|
|
<p>若 <span class="t-spar">宽度</span> 或 <span class="t-spar">精度</span> 中使用嵌套的替换域,而对应的参数不是整数类型,或为负,或对于 <span class="t-spar">宽度</span> 为零,则抛出 <span class="t-lc">std::format_error</span> 类型异常。</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw4">float</span> pi <span class="sy1">=</span> <span class="nu17">3.14f</span><span class="sy4">;</span>
|
|
<span class="kw4">auto</span> s1 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:10f}"</span>, pi<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s1 = " 3.140000" (宽度 = 10 )</span>
|
|
<span class="kw4">auto</span> s2 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:{}f}"</span>, pi, <span class="nu0">10</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s2 = " 3.140000" (宽度 = 10 )</span>
|
|
<span class="kw4">auto</span> s3 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:.5f}"</span>, pi<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s3 = "3.14000" (精度 = 5 )</span>
|
|
<span class="kw4">auto</span> s4 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:.{}f}"</span>, pi, <span class="nu0">5</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s4 = "3.14000" (精度 = 5 )</span>
|
|
<span class="kw4">auto</span> s5 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:10.5f}"</span>, pi<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s5 = " 3.14000"</span>
|
|
<span class="co1">// (宽度 = 10 ,精度 = 5 )</span>
|
|
<span class="kw4">auto</span> s6 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:{}.{}f}"</span>, pi, <span class="nu0">10</span>, <span class="nu0">5</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s6 = " 3.14000"</span>
|
|
<span class="co1">// (宽度 = 10 ,精度 = 5 )</span>
|
|
|
|
<span class="kw4">auto</span> b1 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:{}f}"</span>, pi, <span class="nu16">10.0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 抛出:宽度不是整数类型</span>
|
|
<span class="kw4">auto</span> b2 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:{}f}"</span>, pi, <span class="sy2">-</span><span class="nu0">10</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 抛出:宽度为负</span>
|
|
<span class="kw4">auto</span> b3 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:.{}f}"</span>, pi, <span class="nu16">5.0</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 抛出:精度不是整数类型</span></pre></div>
|
|
</div>
|
|
<p>对于字符串类型,宽度定义为适合将它显示到终端的估计列位置数值。</p>
|
|
<p>就宽度计算目的,假设字符串用实现定义的编码。宽度计算的方法是未指定的,但对于以 Unicode 的字符串,实现应该估计字符串的宽度为其扩展字素集群中首个码位的估计宽度之和。若 Unicode 码位在下列范围内,则估计宽度为 2 ,否则为 1 :</p>
|
|
<ul>
|
|
<li>U+1100 - U+115F</li>
|
|
<li>U+2329 - U+232A</li>
|
|
<li>U+2E80 - U+303E</li>
|
|
<li>U+3040 - U+A4CF</li>
|
|
<li>U+AC00 - U+D7A3</li>
|
|
<li>U+F900 - U+FAFF</li>
|
|
<li>U+FE10 - U+FE19</li>
|
|
<li>U+FE30 - U+FE6F</li>
|
|
<li>U+FF00 - U+FF60</li>
|
|
<li>U+FFE0 - U+FFE6</li>
|
|
<li>U+1F300 - U+1F64F</li>
|
|
<li>U+1F900 - U+1F9FF</li>
|
|
<li>U+20000 - U+2FFFD</li>
|
|
<li>U+30000 - U+3FFFD</li>
|
|
</ul>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw4">auto</span> s1 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:.^5s}"</span>, <span class="st0">"🐱"</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s1 = ".🐱.."</span>
|
|
<span class="kw4">auto</span> s2 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:.5s}"</span>, <span class="st0">"🐱🐱🐱"</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s2 = "🐱🐱"</span>
|
|
<span class="kw4">auto</span> s3 <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:.<5.5s}"</span>, <span class="st0">"🐱🐱🐱"</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// s3 = "🐱🐱."</span></pre></div>
|
|
</div>
|
|
<h5><span class="mw-headline" id="L_.EF.BC.88.E6.9C.AC.E5.9C.B0.E7.8E.AF.E5.A2.83.E7.89.B9.E5.AE.9A.E7.9A.84.E6.A0.BC.E5.BC.8F.E5.8C.96.EF.BC.89">L (本地环境特定的格式化)</span></h5>
|
|
<p><code><b>L</b></code> 选项导致使用本地环境特定的形式。此选项仅对算术类型合法。</p>
|
|
<ul>
|
|
<li>对于整数类型,本地环境特定形式按照环境的本地环境,插入适合的数位组分隔字符。</li>
|
|
<li>对于浮点类型,本地环境特定形式按照环境的本地环境,插入适合的数位组和底分隔字符。</li>
|
|
<li>对于 <code>bool</code> 的文本表示,本地环境特定形式使用如同通过 <span class="t-lc"><a href="cpp-locale-numpunct-truefalsename.html">std::numpunct::truename</a></span> 或 <span class="t-lc"><a href="cpp-locale-numpunct-truefalsename.html">std::numpunct::falsename</a></span> 获得的字符串。</li>
|
|
</ul>
|
|
<h5><span class="mw-headline" id=".E7.B1.BB.E5.9E.8B">类型</span></h5>
|
|
<p><span class="t-spar">类型</span> 选项确定应该如何显示数据。</p>
|
|
<p>可用的字符串显示类型为:</p>
|
|
<ul>
|
|
<li>无、 <code><b>s</b></code> :复制字符串到输出。</li>
|
|
</ul>
|
|
<p>可用的 <code>char</code> 、 <code>wchar_t</code> 与 <code>bool</code> 外的整数类型的整数显示类型为:</p>
|
|
<ul>
|
|
<li><code><b>b</b></code> :二进制格式。如同通过调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">to_chars</span><span class="br0">(</span>first, last, value, <span class="nu0">2</span><span class="br0">)</span></span></span> 产生输出。底前缀为 <code>0b</code> 。</li>
|
|
<li><code><b>B</b></code> :同 <code><b>b</b></code> ,除了底前缀为 <code>0B</code> 。</li>
|
|
<li><code><b>c</b></code> :复制字符 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">static_cast</span><span class="sy1"><</span>CharT<span class="sy1">></span><span class="br0">(</span>value<span class="br0">)</span></span></span> 到输出,其中 <span class="t-c"><span class="mw-geshi cpp source-cpp">CharT</span></span> 是格式字符串的字符类型。若值不在 <span class="t-c"><span class="mw-geshi cpp source-cpp">CharT</span></span> 的可表示值的范围中则抛出 <span class="t-lc">std::format_error</span> 。</li>
|
|
<li><code><b>d</b></code> :十进制格式。如同通过调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">to_chars</span><span class="br0">(</span>first, last, value<span class="br0">)</span></span></span> 产生输出。</li>
|
|
<li><code><b>o</b></code> :八进制格式。如同通过调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">to_chars</span><span class="br0">(</span>first, last, value, <span class="nu0">8</span><span class="br0">)</span></span></span>.产生输出。若对应参数值非零则底前缀为 <code>0</code> ,否则为空。</li>
|
|
<li><code><b>x</b></code> :十六进制格式。如同通过调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">to_chars</span><span class="br0">(</span>first, last, value, <span class="nu0">16</span><span class="br0">)</span></span></span> 产生输出。底前缀为 <code>0x</code> 。</li>
|
|
<li><code><b>X</b></code> :同 <code><b>x</b></code> ,除了对 9 以上的数字使用大写字母且底前缀为 <code>0X</code> 。</li>
|
|
<li>无:同 <code><b>d</b></code> 。</li>
|
|
</ul>
|
|
<p>可用的 <code>char</code> 及 <code>wchar_t</code> 表示类型为:</p>
|
|
<ul>
|
|
<li>无、 <code><b>c</b></code> :复制字符到输出。</li>
|
|
<li><code><b>b</b></code> 、 <code><b>B</b></code> 、 <code><b>d</b></code> 、 <code><b>o</b></code> 、 <code><b>x</b></code> 、 <code><b>X</b></code> :使用整数表示类型。</li>
|
|
</ul>
|
|
<p>可用的 <code>bool</code> 表示类型为:</p>
|
|
<ul>
|
|
<li>无、 <code><b>s</b></code> :复制文本表示( <code><b>true</b></code> 或 <code><b>false</b></code> 或本地环境特定形式)到输出。</li>
|
|
<li><code><b>b</b></code> 、 <code><b>B</b></code> 、 <code><b>c</b></code> 、 <code><b>d</b></code> 、 <code><b>o</b></code> 、 <code><b>x</b></code> 、 <code><b>X</b></code> :以值 <code>static_cast<unsigned char>(value)</code> 使用整数表示类型。</li>
|
|
</ul>
|
|
<p>可用的浮点表示类型为:</p>
|
|
<ul>
|
|
<li><code><b>a</b></code> :若指定<i>精度</i>,则如同通过调用 <a href="cpp-utility-to_chars.html"><tt>std::to_chars(first, last, value, std::chars_format::hex, precision)</tt></a> 产生输出,其中 <code>precision</code> 是指定的精度,否则如同通过 <a href="cpp-utility-to_chars.html"><tt>std::to_chars(first, last, value, std::chars_format::hex)</tt></a> 产生输出。</li>
|
|
<li><code><b>A</b></code> :同 <code><b>a</b></code> ,除了对 9 以上的数字使用大写字母并用 <code>P</code> 指示指数。</li>
|
|
<li><code><b>e</b></code> :如同通过调用 <a href="cpp-utility-to_chars.html"><tt>std::to_chars(first, last, value, std::chars_format::scientific, precision)</tt></a> 产生输出,其中 <code>precision</code> 为指定的精度,或若未指定精度则为 6 。</li>
|
|
<li><code><b>E</b></code> :同 <code><b>e</b></code> ,除了用 <code>E</code> 指示指数。</li>
|
|
<li><code><b>f</b></code> 、 <code><b>F</b></code> :如同通过调用 <a href="cpp-utility-to_chars.html"><tt>std::to_chars(first, last, value, std::chars_format::fixed, precision)</tt></a> 产生输出,其中 <code>precision</code> 为指定的精度,或若未指定精度则为 6 。</li>
|
|
<li><code><b>g</b></code> :如同通过调用 <a href="cpp-utility-to_chars.html"><tt>std::to_chars(first, last, value, std::chars_format::general, precision)</tt></a> 产生输出,其中 <code>precision</code> 为指定的精度,或若未指定精度则为 6 。</li>
|
|
<li><code><b>G</b></code> :同 <code><b>g</b></code> ,除了用 <code>E</code> 指示指数。</li>
|
|
<li>无:若指定<i>精度</i>,则如同通过调用 <a href="cpp-utility-to_chars.html"><tt>std::to_chars(first, last, value, std::chars_format::general, precision)</tt></a> 产生输出,其中 <code>precision</code> 为指定的精度;否则如同通过调用 <a href="cpp-utility-to_chars.html"><tt>std::to_chars(first, last, value)</tt></a> 产生输出。</li>
|
|
</ul>
|
|
<p>对于小写表示类型,分别格式化无穷大和 NaN 为 <code>inf</code> 与 <code>nan</code> 。对于大写表示类型,分别格式化无穷大和 NaN 为 <code>INF</code> 与 <code>NAN</code> 。</p>
|
|
<p>可用的指针表示类型(亦用于 <code>std::nullptr_t</code> )为:</p>
|
|
<ul>
|
|
<li>无、 <code><b>p</b></code> :若定义 <span class="t-lc"><a href="cpp-types-integer.html">std::uintptr_t</a></span> ,则如同通过调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">to_chars</span><span class="br0">(</span>first, last, <span class="kw1">reinterpret_cast</span><span class="sy1"><</span><a href="cpp-types-integer.html"><span class="kw133">std::<span class="me2">uintptr_t</span></span></a><span class="sy1">></span><span class="br0">(</span>value<span class="br0">)</span>, <span class="nu0">16</span><span class="br0">)</span></span></span> 产生输出,并添加前缀 <code>0x</code> 到输出;否则输出为实现定义。</li>
|
|
</ul>
|
|
<h3><span class="mw-headline" id=".E5.BA.93.E7.B1.BB.E5.9E.8B.E7.9A.84.E6.A0.87.E5.87.86.E7.89.B9.E5.8C.96">库类型的标准特化</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-duration-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::duration></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按提供的格式格式化 <code>duration</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-system_clock-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::sys_time></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>sys_time</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-utc_clock-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::utc_time></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>utc_time</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-tai_clock-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::tai_time></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>tai_time</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-gps_clock-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::gps_time></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>gps_time</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-file_clock-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::file_time></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>file_time</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-local_t-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::local_time></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>local_time</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-day-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::day></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>day</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-month-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::month></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>month</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-year-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::year></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>year</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-weekday-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::weekday></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>weekday</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-weekday_indexed-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::weekday_indexed></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>weekday_indexed</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-weekday_last-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::weekday_last></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>weekday_last</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-month_day-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::month_day></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>month_day</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-month_day_last-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::month_day_last></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>month_day_last</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-month_weekday-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::month_weekday></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>month_weekday</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-month_weekday_last-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::month_weekday_last></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>month_weekday_last</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-year_month-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::year_month></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>year_month</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-year_month_day-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::year_month_day></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>year_month_day</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-year_month_day_last-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::year_month_day_last></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>year_month_day_last</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-year_month_weekday-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::year_month_weekday></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>year_month_weekday</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-year_month_weekday_last-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::year_month_weekday_last></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>year_month_weekday_last</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-hh_mm_ss-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::hh_mm_ss></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>hh_mm_ss</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-sys_info-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::sys_info></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>sys_info</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-local_info-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::local_info></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>local_info</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-chrono-zoned_time-formatter.html"><span class="t-lines"><span>std::formatter<span class="t-dsc-small"><std::chrono::zoned_time></span></span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td><span class="t-lc">std::formatter</span> 的特化,按照提供的格式格式化 <code>zoned_time</code><br />
|
|
<span class="t-mark">(类模板特化)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<div class="t-example">
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#include <format></span>
|
|
<span class="co2">#include <iostream></span>
|
|
|
|
<span class="co1">// 类型 T 的包装</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw1">struct</span> Box <span class="br0">{</span>
|
|
T value<span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 能用被包装值的格式说明格式化包装 Box<T></span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> CharT<span class="sy1">></span>
|
|
<span class="kw1">struct</span> std<span class="sy4">::</span><span class="me2">formatter</span><span class="sy1"><</span>Box<span class="sy1"><</span>T<span class="sy1">></span>, CharT<span class="sy1">></span> <span class="sy4">:</span> std<span class="sy4">::</span><span class="me2">formatter</span><span class="sy1"><</span>T, CharT<span class="sy1">></span> <span class="br0">{</span>
|
|
<span class="co1">// 从基类继承 parse()</span>
|
|
|
|
<span class="co1">// 通过以被包装值调用基类实现定义 format()</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> FormatContext<span class="sy1">></span>
|
|
<span class="kw4">auto</span> format<span class="br0">(</span>Box<span class="sy1"><</span>T<span class="sy1">></span> t, FormatContext<span class="sy3">&</span> fc<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> std<span class="sy4">::</span><span class="me2">formatter</span><span class="sy1"><</span>T, CharT<span class="sy1">></span><span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span>t.<span class="me1">value</span>, fc<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
|
|
Box<span class="sy1"><</span><span class="kw4">int</span><span class="sy1">></span> v <span class="sy1">=</span> <span class="br0">{</span> <span class="nu0">42</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> std<span class="sy4">::</span><span class="me2">format</span><span class="br0">(</span><span class="st0">"{:#x}"</span>, v<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">0x2a</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-format-basic_format_context.html"><span class="t-lines"><span>basic_format_context</span><span>format_context</span><span>wformat_context</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>格式化状态,包括所有格式化参数和输出迭代器<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|