|
68 | 68 |
|
69 | 69 | </head> |
70 | 70 | <body> |
71 | | -<header data-kunai-mdinfo="{"meta": {"header": ["format"], "id-type": ["function template"], "namespace": ["std"], "cpp": ["cpp20"]}, "sources": [{"id": "fdd2a22ab0016ebc458fa89bd45ac8611dd21eaa", "source": "#include <iostream>\n#include <string>\n#include <format>\n\nint main()\n{\n char buffer[256];\n auto [end, n] = std::format_to_n(buffer, std::size(buffer)-1, \"The answer is {}.\", 42);\n *end = '\\0';\n std::cout << buffer << std::endl;\n}\n"}], "page_id": ["reference", "format", "format_to_n"]}"> |
| 71 | +<header data-kunai-mdinfo="{"meta": {"header": ["format"], "id-type": ["function template"], "namespace": ["std"], "cpp": ["cpp20"]}, "sources": [{"id": "863ff0372506b2a0592bcf943230bfb87d6fba8a", "source": "#include <iostream>\n#include <string>\n#include <format>\n\nint main()\n{\n // \u5341\u5206\u306a\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u304c\u3042\u308b\u5834\u5408\n {\n char buffer[256];\n auto [out, size] = std::format_to_n(buffer, std::size(buffer)-1, \"The answer is {}.\", 42);\n *out = '\\0';\n std::cout << buffer << std::endl;\n std::cout << \"size: \" << size << std::endl;\n }\n\n // \u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u306b\u3088\u308a\u5207\u308a\u6368\u3066\u3089\u308c\u308b\u5834\u5408\n {\n char buffer[10]; // \u5c0f\u3055\u3044\u30d0\u30c3\u30d5\u30a1\n // \"The answer is 42.\" \u306f17\u6587\u5b57\u5fc5\u8981\u3060\u304c\u3001\u30d0\u30c3\u30d5\u30a1\u306f9\u6587\u5b57\u5206(null\u6587\u5b57\u5206\u9664\u304f)\u3057\u304b\u306a\u3044\n auto [out, size] = std::format_to_n(buffer, std::size(buffer)-1, \"The answer is {}.\", 42);\n *out = '\\0';\n\n std::cout << \"truncated: \" << buffer << std::endl;\n // size \u306f\u672c\u6765\u51fa\u529b\u3055\u308c\u308b\u306f\u305a\u3060\u3063\u305f\u9577\u3055 (17) \u3092\u8fd4\u3059\n std::cout << \"required: \" << size << std::endl;\n }\n}\n"}], "page_id": ["reference", "format", "format_to_n"]}"> |
72 | 72 | <nav class="navbar navbar-default" role="navigation"> |
73 | 73 | <div class="container-fluid"> |
74 | 74 | <div class="navbar-header"> |
|
188 | 188 |
|
189 | 189 | <p class="text-right"><small> |
190 | 190 | 最終更新日時(UTC): |
191 | | - <span itemprop="datePublished" content="2025-07-08T15:33:39"> |
192 | | - 2025年07月08日 15時33分39秒 |
| 191 | + <span itemprop="datePublished" content="2026-01-04T10:29:48"> |
| 192 | + 2026年01月04日 10時29分48秒 |
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">teruyamato0731</span> |
197 | 197 | </span> |
198 | 198 | が更新 |
199 | 199 | </small></p> |
@@ -282,26 +282,50 @@ <h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成 |
282 | 282 | </ul> |
283 | 283 | <h2><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価結果となるオブジェクト・値">戻り値</a></h2> |
284 | 284 | <p><code>format_to_n_result{out + M, N}</code> (ただし、<code>N</code> = <code>formatted_size(fmt, args...)</code> または <code>formatted_size(loc, fmt, args...)</code>、<code>M</code> = <code>min(max(n, 0), N)</code>)</p> |
| 285 | +<p><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価結果となるオブジェクト・値">戻り値</a>のオブジェクトが保持するメンバ変数の意味は以下の通り:</p> |
| 286 | +<ul> |
| 287 | +<li><code>out</code> : 出力範囲の末尾(実際に書き込まれた最後の文字の次)を指す出力イテレータ。</li> |
| 288 | +<li><code>size</code> : 文字列表現全体を格納するのに必要だった文字数(切り捨てを考慮せず、<code><a href="formatted_size.html">formatted_size</a></code>の結果と等しい)。</li> |
| 289 | +</ul> |
285 | 290 | <h2><a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a></h2> |
286 | 291 | <p>フォーマット実行時に失敗した場合、<code><a href="format_error.html">format_error</a></code>を投げる。</p> |
287 | 292 | <h2>備考</h2> |
288 | 293 | <p>マルチバイト文字列、ワイド文字列の区別は、可変長引数部分で受け取れる文字列の型にも適用される。</p> |
289 | 294 | <h2>例</h2> |
290 | | -<p><div class="yata" id="fdd2a22ab0016ebc458fa89bd45ac8611dd21eaa"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../iostream.html"><iostream></a></span><span class="cp"></span> |
| 295 | +<p><div class="yata" id="863ff0372506b2a0592bcf943230bfb87d6fba8a"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../iostream.html"><iostream></a></span><span class="cp"></span> |
291 | 296 | <span class="cp">#include</span> <span class="cpf"><a href="../string.html"><string></a></span><span class="cp"></span> |
292 | 297 | <span class="cp">#include</span> <span class="cpf"><a href="../format.html"><format></a></span><span class="cp"></span> |
293 | 298 |
|
294 | 299 | <span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> |
295 | 300 | <span class="p">{</span> |
296 | | - <span class="kt">char</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">256</span><span class="p">];</span> |
297 | | - <span class="k">auto</span> <span class="p">[</span><span class="n">end</span><span class="p">,</span> <span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">format_to_n</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">size</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">"The answer is {}."</span><span class="p">,</span> <span class="mi">42</span><span class="p">);</span> |
298 | | - <span class="o">*</span><span class="n">end</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> |
299 | | - <span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="n">buffer</span> <span class="o"><<</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 301 | + <span class="c1">// 十分なバッファサイズがある場合</span> |
| 302 | + <span class="p">{</span> |
| 303 | + <span class="kt">char</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">256</span><span class="p">];</span> |
| 304 | + <span class="k">auto</span> <span class="p">[</span><span class="n">out</span><span class="p">,</span> <span class="n">size</span><span class="p">]</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">format_to_n</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">size</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">"The answer is {}."</span><span class="p">,</span> <span class="mi">42</span><span class="p">);</span> |
| 305 | + <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> |
| 306 | + <span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="n">buffer</span> <span class="o"><<</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 307 | + <span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="s">"size: "</span> <span class="o"><<</span> <span class="n">size</span> <span class="o"><<</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 308 | + <span class="p">}</span> |
| 309 | + |
| 310 | + <span class="c1">// バッファサイズにより切り捨てられる場合</span> |
| 311 | + <span class="p">{</span> |
| 312 | + <span class="kt">char</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">10</span><span class="p">];</span> <span class="c1">// 小さいバッファ</span> |
| 313 | + <span class="c1">// "The answer is 42." は17文字必要だが、バッファは9文字分(null文字分除く)しかない</span> |
| 314 | + <span class="k">auto</span> <span class="p">[</span><span class="n">out</span><span class="p">,</span> <span class="n">size</span><span class="p">]</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">format_to_n</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">size</span><span class="p">(</span><span class="n">buffer</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">"The answer is {}."</span><span class="p">,</span> <span class="mi">42</span><span class="p">);</span> |
| 315 | + <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> |
| 316 | + |
| 317 | + <span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="s">"truncated: "</span> <span class="o"><<</span> <span class="n">buffer</span> <span class="o"><<</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 318 | + <span class="c1">// size は本来出力されるはずだった長さ (17) を返す</span> |
| 319 | + <span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="s">"required: "</span> <span class="o"><<</span> <span class="n">size</span> <span class="o"><<</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 320 | + <span class="p">}</span> |
300 | 321 | <span class="p">}</span> |
301 | 322 | </code></pre></div> |
302 | 323 | </div></p> |
303 | 324 | <h3>出力</h3> |
304 | 325 | <p><pre><code>The answer is 42. |
| 326 | +size: 17 |
| 327 | +truncated: The answe |
| 328 | +required: 17 |
305 | 329 | </code></pre></p> |
306 | 330 | <h2>実装例</h2> |
307 | 331 | <p><div class="codehilite"><pre><span></span><code><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">CharT</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Out</span><span class="o">></span> |
|
0 commit comments