188
188
189
189
< p class ="text-right "> < small >
190
190
最終更新日時(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秒
193
193
</ span >
194
194
< br />
195
195
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
196
- < span itemprop ="name "> Akira Takahashi </ span >
196
+ < span itemprop ="name "> Tetsuro Matsumura </ span >
197
197
</ span >
198
198
が更新
199
199
</ small > </ p >
@@ -259,7 +259,7 @@ <h3>書式文字列</h3>
259
259
</ p >
260
260
< h3 > < a href ="#std-format-options " id ="std-format-options "> 標準のオプション書式</ a > </ h3 >
261
261
< p > 組み込みの型に対して使える標準のオプション書式は次の通り(< code > []</ code > は省略可の意味)。
262
- 基本的に< code > printf</ code > の書式を踏襲しているが、あくまでもオプションであり、省略しても < code > <iostream> </ code > と同じようにデフォルトの書式が使われる 。</ p >
262
+ 基本的に< code > printf</ code > の書式を踏襲しているが、オプションをすべて省略しても( < code > {} </ code > だけでも)デフォルトの書式が使われる 。</ p >
263
263
< p > < pre > < code > [[fill] align] [sign] ['#'] ['0'] [width] ['.' precision] ['L'] [type]
264
264
</ code > </ pre > </ p >
265
265
< ul >
@@ -430,6 +430,8 @@ <h4>浮動小数点数型の場合</h4>
430
430
</ table >
431
431
< p > デフォルトは < code > g</ code > 。</ p >
432
432
< 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 >
433
435
< h4 > ポインタの場合</ h4 >
434
436
< table border ="1 " bordercolor ="#888 " style ="border-collapse:collapse ">
435
437
< thead >
@@ -475,7 +477,6 @@ <h4>アライメントの詳細</h4>
475
477
< span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> format</ span > < span class ="p "> (</ span > < span class ="s "> "{:あ>6}"</ span > < span class ="p "> ,</ span > < span class ="sc "> 'x'</ span > < span class ="p "> );</ span > < span class ="c1 "> // "あああああx"</ span >
476
478
</ code > </ pre > </ div >
477
479
</ p >
478
- < h5 > 0埋めとの関係</ h5 >
479
480
< p > アライメント方向が指定されていると、0埋めは無効となる。</ p >
480
481
< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="c1 "> // 0埋めは符号を考慮する</ span >
481
482
< 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>
492
493
</ code > </ pre > </ div >
493
494
</ p >
494
495
< 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 "> <</ span > < span class ="kt "> int</ span > < span class ="o "> ></ 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 >
495
500
< p > Range・シーケンスコンテナに対して使用できる標準のオプション書式は次の通り(< code > []</ code > は省略可の意味)。</ p >
496
501
< p > < pre > < code > [[fill] align] [width] [n] [< a href ="../ranges/range.html "> range</ a > -type] [: < a href ="../ranges/range.html "> range</ a > -underlying-spec]
497
502
</ code > </ pre > </ p >
@@ -539,6 +544,12 @@ <h4><a href="#range-format-options" id="range-format-options">Range・シーケ
539
544
< td > 要素型が文字型であること。エスケープした文字列として書式化する</ td >
540
545
< td > C++23</ td >
541
546
</ tr >
547
+ < tr >
548
+ < td > (なし)</ td >
549
+ < td > デフォルト</ td >
550
+ < td > 囲み文字を< code > [ ]</ code > 、区切り文字を< code > ,</ code > として書式化する</ td >
551
+ < td > C++23</ td >
552
+ </ tr >
542
553
</ tbody >
543
554
</ table >
544
555
< ul >
@@ -551,13 +562,18 @@ <h4><a href="#range-format-options" id="range-format-options">Range・シーケ
551
562
</ li >
552
563
< 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 >
553
564
< 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 >
554
566
</ ul >
555
567
< h4 > < a href ="#assoc-format-options " id ="assoc-format-options "> 連想コンテナの書式 (C++23)</ a > </ h4 >
556
568
< p > Range・シーケンスコンテナと同じだが、デフォルトで囲み文字を< code > { }</ code > とする。</ p >
557
569
< ul >
558
570
< li > メンバ型< code > key_type</ code > を持つ場合、連想コンテナとみなされる</ li >
559
571
< 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 >
560
572
</ 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 "> <</ 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 "> ></ 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 >
561
577
< h4 > < a id ="tuple-format-options " name ="#tuple-format-options "> pair、tupleの書式 (C++23)</ a > </ h4 >
562
578
< p > < code > < a href ="../utility/pair.html "> std::pair</ a > </ code > と< code > < a href ="../tuple/tuple.html "> std::tuple</ a > </ code > に対して使用できる標準のオプション書式は次の通り(< code > []</ code > は省略可の意味)。</ p >
563
579
< p > < pre > < code > [[fill] align] [width] [tuple-type]
@@ -610,6 +626,7 @@ <h4><a id="tuple-format-options" name="#tuple-format-options">pair、tupleの書
610
626
< ul >
611
627
< li > 要素型ごとに個別に書式を指定することはできない</ li >
612
628
< li > デバッグ出力可能な要素型の場合、デバッグ出力は常に有効</ li >
629
+ < li > デフォルト書式に対応する< code > type</ code > がないため、明示的に指定することはできない</ li >
613
630
</ ul >
614
631
< h3 > 書式例</ h3 >
615
632
< 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>
671
688
< ul >
672
689
< li > マルチバイト文字列、ワイド文字列の区別は、可変長引数部分で受け取れる文字列の型にも適用される。< ul >
673
690
< 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 >
675
692
</ ul >
676
693
</ 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 >
680
696
</ ul >
681
697
</ li >
682
698
</ ul >
0 commit comments