Skip to content

Commit e541d8f

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 3eee442 commit e541d8f

File tree

4 files changed

+216
-927
lines changed

4 files changed

+216
-927
lines changed

reference/charconv/to_chars.html

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,12 @@
188188

189189
<p class="text-right"><small>
190190
最終更新日時(UTC):
191-
<span itemprop="datePublished" content="2024-06-11T13:45:38">
192-
2024年06月11日 13時45分38秒
191+
<span itemprop="datePublished" content="2024-06-30T10:51:45">
192+
2024年06月30日 10時51分45秒
193193
</span>
194194
<br/>
195195
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
196-
<span itemprop="name">Akira Takahashi</span>
196+
<span itemprop="name">Tetsuro Matsumura</span>
197197
</span>
198198
が更新
199199
</small></p>
@@ -356,7 +356,14 @@ <h2>効果</h2>
356356
<code>chars_format::general</code>が指定された場合は(2)(3)(4)(5)と同等。</p>
357357
</li>
358358
<li>
359-
<p>(10)(11)(12)(13) : <code>fmt</code><code>precision</code>によって指定されたフォーマット指定子と精度を用いて、Cロケールで<code>printf</code>によって行われたかのように浮動小数点数を文字列へ変換する。</p>
359+
<p>(10)(11)(12)(13) : <code>fmt</code><code>precision</code>によって指定されたフォーマット指定子と精度を用いて、Cロケールで<code>printf</code>によって行われたかのように浮動小数点数を文字列へ変換する。<br />
360+
精度は、<code>chars_format::fixed</code>では小数点以下の正確な桁数、<code>chars_format::scientific</code><code>chars_format::hex</code>では最小の桁数を表す。<br />
361+
<code>chars_format::general</code>が指定された場合は次のようになる。</p>
362+
<ul>
363+
<li>指数表記したときの指数を<code>X</code><code>precision</code>と1の大きいほうを<code>P</code>とする。</li>
364+
<li><code>P &gt; X ≥ −4</code> のとき、精度 <code>P - 1 - X</code> で固定小数形式を使用する。</li>
365+
<li>それ以外の場合は、精度 <code>P - 1</code> で指数形式を使用する。</li>
366+
</ul>
360367
</li>
361368
</ul>
362369
<p>出力文字列が最も短くなるようにとは、小数点の前に少なくとも1桁あり、対応する<code><a href="from_chars.html">from_chars</a></code>関数によって値を正確に復元できるような最小の文字数、になることである。<br />
@@ -620,6 +627,7 @@ <h2>参照</h2>
620627
<li>C++23で<a class="cpprefjp-defined-word" data-desc="&lt;stdfloat&gt;で定義される内部表現の規定された浮動小数点数型" href="../stdfloat.html">拡張浮動小数点数型</a>に対応した</li>
621628
</ul>
622629
</li>
630+
<li><a href="https://ja.cppreference.com/w/c/io/fprintf" target="_blank">C言語リファレンス - fprintf</a></li>
623631
</ul></div>
624632

625633
</div>

reference/format/format.html

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,12 @@
188188

189189
<p class="text-right"><small>
190190
最終更新日時(UTC):
191-
<span itemprop="datePublished" content="2024-06-11T13:45:38">
192-
2024年06月11日 13時45分38秒
191+
<span itemprop="datePublished" content="2024-06-30T10:51:45">
192+
2024年06月30日 10時51分45秒
193193
</span>
194194
<br/>
195195
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
196-
<span itemprop="name">Akira Takahashi</span>
196+
<span itemprop="name">Tetsuro Matsumura</span>
197197
</span>
198198
が更新
199199
</small></p>
@@ -259,7 +259,7 @@ <h3>書式文字列</h3>
259259
</p>
260260
<h3><a href="#std-format-options" id="std-format-options">標準のオプション書式</a></h3>
261261
<p>組み込みの型に対して使える標準のオプション書式は次の通り(<code>[]</code>は省略可の意味)。
262-
基本的に<code>printf</code>の書式を踏襲しているが、あくまでもオプションであり、省略しても<code>&lt;iostream&gt;</code>と同じようにデフォルトの書式が使われる</p>
262+
基本的に<code>printf</code>の書式を踏襲しているが、オプションをすべて省略しても(<code>{}</code>だけでも)デフォルトの書式が使われる</p>
263263
<p><pre><code>[[fill] align] [sign] ['#'] ['0'] [width] ['.' precision] ['L'] [type]
264264
</code></pre></p>
265265
<ul>
@@ -430,6 +430,8 @@ <h4>浮動小数点数型の場合</h4>
430430
</table>
431431
<p>デフォルトは <code>g</code></p>
432432
<p>大文字のオプションを指定すると数値中のアルファベットが大文字になる。</p>
433+
<p>「値に応じて」の詳細や、精度の意味については<code><a href="../charconv/to_chars.html">to_chars</a></code>を参照。</p>
434+
<p>代替表現を指定すると、小数点以下が何もなくても小数点記号を出力する。<code>g</code>/<code>G</code>の場合は、代替表現を指定しないかぎり末尾の0およびそれによって不要になる小数点を出力しない。</p>
433435
<h4>ポインタの場合</h4>
434436
<table border="1" bordercolor="#888" style="border-collapse:collapse">
435437
<thead>
@@ -475,7 +477,6 @@ <h4>アライメントの詳細</h4>
475477
<span class="n">std</span><span class="o">::</span><span class="n">format</span><span class="p">(</span><span class="s">"{:あ&gt;6}"</span><span class="p">,</span> <span class="sc">'x'</span><span class="p">);</span> <span class="c1">// "あああああx"</span>
476478
</code></pre></div>
477479
</p>
478-
<h5>0埋めとの関係</h5>
479480
<p>アライメント方向が指定されていると、0埋めは無効となる。</p>
480481
<p><div class="codehilite"><pre><span></span><code><span class="c1">// 0埋めは符号を考慮する</span>
481482
<span class="n">std</span><span class="o">::</span><span class="n">format</span><span class="p">(</span><span class="s">"{:05}"</span><span class="p">,</span> <span class="mi">42</span><span class="p">);</span> <span class="c1">// "00042"</span>
@@ -492,6 +493,10 @@ <h5>0埋めとの関係</h5>
492493
</code></pre></div>
493494
</p>
494495
<h4><a href="#range-format-options" id="range-format-options">Range・シーケンスコンテナの書式 (C++23)</a></h4>
496+
<p>Range・シーケンスコンテナのフォーマットでは、要素の間に区切り文字を挿入して、全体を囲み文字で囲んで出力する。各要素は再帰的にフォーマットされる。</p>
497+
<p><div class="codehilite"><pre><span></span><code><span class="n">std</span><span class="o">::</span><span class="n">format</span><span class="p">(</span><span class="s">"{}"</span><span class="p">,</span> <span class="n"><a href="../vector/vector.html">std::vector</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">});</span> <span class="c1">// "[1, 2, 3]"</span>
498+
</code></pre></div>
499+
</p>
495500
<p>Range・シーケンスコンテナに対して使用できる標準のオプション書式は次の通り(<code>[]</code>は省略可の意味)。</p>
496501
<p><pre><code>[[fill] align] [width] [n] [<a href="../ranges/range.html">range</a>-type] [: <a href="../ranges/range.html">range</a>-underlying-spec]
497502
</code></pre></p>
@@ -539,6 +544,12 @@ <h4><a href="#range-format-options" id="range-format-options">Range・シーケ
539544
<td>要素型が文字型であること。エスケープした文字列として書式化する</td>
540545
<td>C++23</td>
541546
</tr>
547+
<tr>
548+
<td>(なし)</td>
549+
<td>デフォルト</td>
550+
<td>囲み文字を<code>[ ]</code>、区切り文字を<code>,</code>として書式化する</td>
551+
<td>C++23</td>
552+
</tr>
542553
</tbody>
543554
</table>
544555
<ul>
@@ -551,13 +562,18 @@ <h4><a href="#range-format-options" id="range-format-options">Range・シーケ
551562
</li>
552563
<li>コンテナアダプタである<code><a href="../queue/queue.html">std::queue</a></code><code><a href="../queue/priority_queue.html">std::priority_queue</a></code><code><a href="../stack/stack.html">std::stack</a></code>も使用できる</li>
553564
<li><code><a href="../string/basic_string.html">std::basic_string</a></code><code><a href="../string_view/basic_string_view.html">std::basic_string_view</a></code>はRangeでもあるが、特殊化の優先順位によって標準のフォーマッターが選択されるため、Rangeとしてフォーマットすることはできない</li>
565+
<li>デフォルト書式に対応する<code>type</code>がないため、明示的に指定することはできない</li>
554566
</ul>
555567
<h4><a href="#assoc-format-options" id="assoc-format-options">連想コンテナの書式 (C++23)</a></h4>
556568
<p>Range・シーケンスコンテナと同じだが、デフォルトで囲み文字を<code>{ }</code>とする。</p>
557569
<ul>
558570
<li>メンバ型<code>key_type</code>を持つ場合、連想コンテナとみなされる</li>
559571
<li>さらに、メンバ型<code>mapped_type</code>を持ち、要素が<code><a href="../utility/pair.html">std::pair</a></code>またはサイズ2の<code><a href="../tuple/tuple.html">std::tuple</a></code>の場合、<code>map</code>互換のコンテナとみなされる。このとき、要素にも<code>m</code>書式を用いる</li>
560572
</ul>
573+
<p><div class="codehilite"><pre><span></span><code><span class="n"><a href="../map/map.html">std::map</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="p">,</span> <span class="n"><a href="../string/basic_string.html">std::string</a></span><span class="o">&gt;</span> <span class="n">m</span> <span class="p">{{</span><span class="mi">1</span><span class="p">,</span> <span class="s">"aaa"</span><span class="p">},</span> <span class="p">{</span><span class="mi">2</span><span class="p">,</span> <span class="s">"bbb"</span><span class="p">}};</span>
574+
<span class="n">std</span><span class="o">::</span><span class="n">format</span><span class="p">(</span><span class="s">"{}"</span><span class="p">,</span> <span class="n">m</span><span class="p">);</span> <span class="c1">// {1: "aaa", 2: "bbb"}</span>
575+
</code></pre></div>
576+
</p>
561577
<h4><a id="tuple-format-options" name="#tuple-format-options">pair、tupleの書式 (C++23)</a></h4>
562578
<p><code><a href="../utility/pair.html">std::pair</a></code><code><a href="../tuple/tuple.html">std::tuple</a></code>に対して使用できる標準のオプション書式は次の通り(<code>[]</code>は省略可の意味)。</p>
563579
<p><pre><code>[[fill] align] [width] [tuple-type]
@@ -610,6 +626,7 @@ <h4><a id="tuple-format-options" name="#tuple-format-options">pair、tupleの書
610626
<ul>
611627
<li>要素型ごとに個別に書式を指定することはできない</li>
612628
<li>デバッグ出力可能な要素型の場合、デバッグ出力は常に有効</li>
629+
<li>デフォルト書式に対応する<code>type</code>がないため、明示的に指定することはできない</li>
613630
</ul>
614631
<h3>書式例</h3>
615632
<p><div class="codehilite"><pre><span></span><code><span class="kt">char</span> <span class="n">c</span> <span class="o">=</span> <span class="mi">120</span><span class="p">;</span>
@@ -671,12 +688,11 @@ <h2>備考</h2>
671688
<ul>
672689
<li>マルチバイト文字列、ワイド文字列の区別は、可変長引数部分で受け取れる文字列の型にも適用される。<ul>
673690
<li>例えば、フォーマット文字列がマルチバイトの場合、引数にワイド文字列を渡すことは標準ではできない。</li>
674-
<li><a class="cpprefjp-defined-word" data-desc="プログラム定義。ユーザー(プログラマ)によって定義されること(標準ライブラリで定義されるものを除く)">ユーザー定義</a>フォーマッターで拡張することは可能。</li>
691+
<li><a class="cpprefjp-defined-word" data-desc="プログラム定義。ユーザー(プログラマ)によって定義されること(標準ライブラリで定義されるものを除く)">ユーザー定義</a>フォーマッターで拡張することは可能。ただし、<a class="cpprefjp-defined-word" data-desc="プログラム定義。ユーザー(プログラマ)によって定義されること(標準ライブラリで定義されるものを除く)">ユーザー定義</a>の名前に依存しない特殊化は<code>std</code>名前空間に追加できない。</li>
675692
</ul>
676693
</li>
677-
<li><code><a href="../charconv/to_chars.html">to_chars</a></code>はワイド文字列に対応していない。<ul>
678-
<li>ワイド文字列版のときはマルチバイト文字列から変換すると考えられる。</li>
679-
<li>あるいは、<code>to_wchars</code>のようなものを作り、それを使うことも考えられる。</li>
694+
<li><code>format</code>の結果は一部<code><a href="../charconv/to_chars.html">to_chars</a></code>によって定義されているが、<code><a href="../charconv/to_chars.html">to_chars</a></code>自体はワイド文字列に対応していない。<ul>
695+
<li>もし何らかの手段でマルチバイト文字列に変換すれば、<code><a href="../charconv/to_chars.html">to_chars</a></code>に一致する、と解釈できる。</li>
680696
</ul>
681697
</li>
682698
</ul>

0 commit comments

Comments
 (0)