Skip to content

Commit 5ca5a0b

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 0e29fa2 commit 5ca5a0b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+141
-172
lines changed

lang/cpp17/structured_bindings.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ <h2>概要</h2>
225225
<span class="p">}</span>
226226

227227
<span class="c1">// 関数f()の戻り値である整数と文字列の組を分解する。</span>
228-
<span class="c1">// pairのfirstをid変数に代入し、secondをmessage変数に代入する。</span>
228+
<span class="c1">// <a href="../../reference/utility/pair.html">pair</a>のfirstをid変数に代入し、secondをmessage変数に代入する。</span>
229229
<span class="c1">// id変数の型はfirstの型(int)となり、message変数の型はsecondの型(string)となる。</span>
230230
<span class="k">auto</span> <span class="p">[</span><span class="n">id</span><span class="p">,</span> <span class="n">message</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">();</span>
231231

@@ -292,7 +292,7 @@ <h3>組・タプルを分解する例</h3>
292292
<span class="c1">// 組を分解する</span>
293293
<span class="p">{</span>
294294
<span class="c1">// 関数f()の戻り値である整数と文字列の組を分解する。</span>
295-
<span class="c1">// pairのfirstをid変数に代入し、secondをmessage変数に代入する。</span>
295+
<span class="c1">// <a href="../../reference/utility/pair.html">pair</a>のfirstをid変数に代入し、secondをmessage変数に代入する。</span>
296296
<span class="c1">// id変数の型はfirstの型(int)となり、message変数の型はsecondの型(string)となる。</span>
297297
<span class="k">auto</span> <span class="p">[</span><span class="n">id</span><span class="p">,</span> <span class="n">message</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">();</span>
298298

@@ -471,7 +471,7 @@ <h3>map::insert()の戻り値を分解する</h3>
471471
<span class="n"><a href="../../reference/map/map.html">std::map</a></span><span class="o">&lt;</span><span class="n"><a href="../../reference/string/basic_string.html">std::string</a></span><span class="p">,</span> <span class="kt">int</span><span class="o">&gt;</span> <span class="n">m</span><span class="p">;</span>
472472

473473
<span class="c1">// 単一要素をとるmap::<a href="../../reference/map/map/insert.html">insert</a>()メンバ関数は、</span>
474-
<span class="c1">// 戻り値としてpair&lt;iterator, bool&gt;を返す。</span>
474+
<span class="c1">// 戻り値として<a href="../../reference/utility/pair.html">pair</a>&lt;iterator, bool&gt;を返す。</span>
475475
<span class="c1">// firstは指定したキーを保持する要素へのイテレータ、</span>
476476
<span class="c1">// secondは挿入に成功したかを表すbool値。</span>
477477
<span class="n">m</span><span class="p">.</span><span class="n"><a href="../../reference/map/map/insert.html">insert</a></span><span class="p">({</span><span class="s">"Alice"</span><span class="p">,</span> <span class="mi">3</span><span class="p">});</span>
@@ -508,7 +508,7 @@ <h2>この機能が必要になった背景・経緯</h2>
508508
<p>C++17時点の構造化束縛では、使用しない変数もコピーあるいはムーブされ、新たな変数が作られてしまう。</p>
509509
<p>また、入れ子になった構造を同時に分解する機能も備えていないため、そのような状況では分解しにくいこともあるだろう。</p>
510510
<p><div class="codehilite"><pre><span></span><code><span class="n"><a href="../../reference/tuple/tuple.html">std::tuple</a></span><span class="o">&lt;</span><span class="n">T1</span><span class="p">,</span> <span class="n"><a href="../../reference/utility/pair.html">std::pair</a></span><span class="o">&lt;</span><span class="n">T2</span><span class="p">,</span> <span class="n">T3</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">T4</span><span class="o">&gt;</span> <span class="n">f</span><span class="p">();</span>
511-
<span class="k">auto</span> <span class="p">{</span> <span class="n">w</span><span class="p">,</span> <span class="p">{</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">},</span> <span class="n">z</span> <span class="p">}</span> <span class="o">=</span> <span class="n">f</span><span class="p">();</span> <span class="c1">// このような、tuple内にあるpairを同時に分解はできない</span>
511+
<span class="k">auto</span> <span class="p">{</span> <span class="n">w</span><span class="p">,</span> <span class="p">{</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">},</span> <span class="n">z</span> <span class="p">}</span> <span class="o">=</span> <span class="n">f</span><span class="p">();</span> <span class="c1">// このような、tuple内にある<a href="../../reference/utility/pair.html">pair</a>を同時に分解はできない</span>
512512
</code></pre></div>
513513
</p>
514514
<h2><a href="#relative-page" id="relative-page">関連項目</a></h2>

lang/cpp20/explicit_bool.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -300,15 +300,15 @@ <h2>この機能が必要になった背景・経緯</h2>
300300
</p>
301301
<p>この問題に対して、C++17では (対応が早い処理系はそれ以前から) これらのクラスのコンストラクタが、条件付きで<code>explicit</code>定義されるようにした。その実装方法としてはSFINAEによって、<code>explicit</code>コンストラクタと非<code>explicit</code>コンストラクタをオーバーロードする方法が使われていた。</p>
302302
<p><div class="codehilite"><pre><span></span><code><span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T1</span><span class="p">,</span> <span class="k">typename</span> <span class="n">T2</span><span class="o">&gt;</span>
303-
<span class="k">struct</span> <span class="n">pair</span> <span class="p">{</span>
303+
<span class="k">struct</span> <span class="n"><a href="../../reference/utility/pair.html">pair</a></span> <span class="p">{</span>
304304
<span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">U1</span><span class="o">=</span><span class="n">T1</span><span class="p">,</span> <span class="k">typename</span> <span class="n">U2</span><span class="o">=</span><span class="n">T2</span><span class="p">,</span>
305305
<span class="n"><a href="../../reference/type_traits/enable_if.html">std::enable_if_t</a></span><span class="o">&lt;</span>
306306
<span class="n"><a href="../../reference/type_traits/is_constructible.html">std::is_constructible_v</a></span><span class="o">&lt;</span><span class="n">T1</span><span class="p">,</span> <span class="n">U1</span><span class="o">&gt;</span> <span class="o">&amp;&amp;</span>
307307
<span class="n"><a href="../../reference/type_traits/is_constructible.html">std::is_constructible_v</a></span><span class="o">&lt;</span><span class="n">T2</span><span class="p">,</span> <span class="n">U2</span><span class="o">&gt;</span> <span class="o">&amp;&amp;</span>
308308
<span class="n"><a href="../../reference/type_traits/is_convertible.html">std::is_convertible_v</a></span><span class="o">&lt;</span><span class="n">U1</span><span class="p">,</span> <span class="n">T1</span><span class="o">&gt;</span> <span class="o">&amp;&amp;</span>
309309
<span class="n"><a href="../../reference/type_traits/is_convertible.html">std::is_convertible_v</a></span><span class="o">&lt;</span><span class="n">U2</span><span class="p">,</span> <span class="n">T2</span><span class="o">&gt;</span>
310310
<span class="p">,</span> <span class="kt">int</span><span class="o">&gt;</span> <span class="o">=</span> <span class="mi">0</span><span class="o">&gt;</span>
311-
<span class="k">constexpr</span> <span class="n">pair</span><span class="p">(</span><span class="n">U1</span><span class="o">&amp;&amp;</span><span class="p">,</span> <span class="n">U2</span><span class="o">&amp;&amp;</span><span class="p">);</span>
311+
<span class="k">constexpr</span> <span class="n"><a href="../../reference/utility/pair.html">pair</a></span><span class="p">(</span><span class="n">U1</span><span class="o">&amp;&amp;</span><span class="p">,</span> <span class="n">U2</span><span class="o">&amp;&amp;</span><span class="p">);</span>
312312

313313
<span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">U1</span><span class="o">=</span><span class="n">T1</span><span class="p">,</span> <span class="k">typename</span> <span class="n">U2</span><span class="o">=</span><span class="n">T2</span><span class="p">,</span>
314314
<span class="n"><a href="../../reference/type_traits/enable_if.html">std::enable_if_t</a></span><span class="o">&lt;</span>
@@ -317,31 +317,31 @@ <h2>この機能が必要になった背景・経緯</h2>
317317
<span class="o">!</span><span class="p">(</span><span class="n"><a href="../../reference/type_traits/is_convertible.html">std::is_convertible_v</a></span><span class="o">&lt;</span><span class="n">U1</span><span class="p">,</span> <span class="n">T1</span><span class="o">&gt;</span> <span class="o">&amp;&amp;</span>
318318
<span class="n"><a href="../../reference/type_traits/is_convertible.html">std::is_convertible_v</a></span><span class="o">&lt;</span><span class="n">U2</span><span class="p">,</span> <span class="n">T2</span><span class="o">&gt;</span><span class="p">)</span>
319319
<span class="p">,</span> <span class="kt">int</span><span class="o">&gt;</span> <span class="o">=</span> <span class="mi">0</span><span class="o">&gt;</span>
320-
<span class="k">explicit</span> <span class="k">constexpr</span> <span class="n">pair</span><span class="p">(</span><span class="n">U1</span><span class="o">&amp;&amp;</span><span class="p">,</span> <span class="n">U2</span><span class="o">&amp;&amp;</span><span class="p">);</span>
320+
<span class="k">explicit</span> <span class="k">constexpr</span> <span class="n"><a href="../../reference/utility/pair.html">pair</a></span><span class="p">(</span><span class="n">U1</span><span class="o">&amp;&amp;</span><span class="p">,</span> <span class="n">U2</span><span class="o">&amp;&amp;</span><span class="p">);</span>
321321
<span class="p">};</span>
322322
</code></pre></div>
323323
</p>
324324
<p>SFINAEによるオーバーロードはパラメータ型を制約するために依然として必要だが、関数ボディの実装が共通である<code>explicit</code>コンストラクタと非<code>explicit</code>コンストラクタは、オーバーロードではなく条件による切り替えをしたかったため、条件付きで関数を<code>explicit</code>にする構文が追加されることとなった。これを使用した場合、前述した<code><a href="../../reference/utility/pair.html">std::pair</a></code>のコンストラクタは、以下のように宣言できる:</p>
325325
<p><div class="codehilite"><pre><span></span><code><span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T1</span><span class="p">,</span> <span class="k">typename</span> <span class="n">T2</span><span class="o">&gt;</span>
326-
<span class="k">struct</span> <span class="n">pair</span> <span class="p">{</span>
326+
<span class="k">struct</span> <span class="n"><a href="../../reference/utility/pair.html">pair</a></span> <span class="p">{</span>
327327
<span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">U1</span><span class="o">=</span><span class="n">T1</span><span class="p">,</span> <span class="k">typename</span> <span class="n">U2</span><span class="o">=</span><span class="n">T2</span><span class="p">,</span>
328328
<span class="n"><a href="../../reference/type_traits/enable_if.html">std::enable_if_t</a></span><span class="o">&lt;</span>
329329
<span class="n"><a href="../../reference/type_traits/is_constructible.html">std::is_constructible_v</a></span><span class="o">&lt;</span><span class="n">T1</span><span class="p">,</span> <span class="n">U1</span><span class="o">&gt;</span> <span class="o">&amp;&amp;</span>
330330
<span class="n"><a href="../../reference/type_traits/is_constructible.html">std::is_constructible_v</a></span><span class="o">&lt;</span><span class="n">T2</span><span class="p">,</span> <span class="n">U2</span><span class="o">&gt;</span>
331331
<span class="p">,</span> <span class="kt">int</span><span class="o">&gt;</span> <span class="o">=</span> <span class="mi">0</span><span class="o">&gt;</span>
332332
<span class="k">explicit</span><span class="p">(</span><span class="o">!</span><span class="n"><a href="../../reference/type_traits/is_convertible.html">std::is_convertible_v</a></span><span class="o">&lt;</span><span class="n">U1</span><span class="p">,</span> <span class="n">T1</span><span class="o">&gt;</span> <span class="o">||</span> <span class="o">!</span><span class="n"><a href="../../reference/type_traits/is_convertible.html">std::is_convertible_v</a></span><span class="o">&lt;</span><span class="n">U2</span><span class="p">,</span> <span class="n">T2</span><span class="o">&gt;</span><span class="p">)</span>
333-
<span class="k">constexpr</span> <span class="n">pair</span><span class="p">(</span><span class="n">U1</span><span class="o">&amp;&amp;</span><span class="p">,</span> <span class="n">U2</span><span class="o">&amp;&amp;</span><span class="p">);</span>
333+
<span class="k">constexpr</span> <span class="n"><a href="../../reference/utility/pair.html">pair</a></span><span class="p">(</span><span class="n">U1</span><span class="o">&amp;&amp;</span><span class="p">,</span> <span class="n">U2</span><span class="o">&amp;&amp;</span><span class="p">);</span>
334334
<span class="p">};</span>
335335
</code></pre></div>
336336
</p>
337337
<p>コンセプトを使用した場合は、以下のようになる:</p>
338338
<p><div class="codehilite"><pre><span></span><code><span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">T1</span><span class="p">,</span> <span class="k">typename</span> <span class="n">T2</span><span class="o">&gt;</span>
339-
<span class="k">struct</span> <span class="n">pair</span> <span class="p">{</span>
339+
<span class="k">struct</span> <span class="n"><a href="../../reference/utility/pair.html">pair</a></span> <span class="p">{</span>
340340
<span class="k">template</span> <span class="o">&lt;</span><span class="k">typename</span> <span class="n">U1</span><span class="o">=</span><span class="n">T1</span><span class="p">,</span> <span class="k">typename</span> <span class="n">U2</span><span class="o">=</span><span class="n">T2</span><span class="o">&gt;</span>
341341
<span class="n">requires</span> <span class="n"><a href="../../reference/type_traits/is_constructible.html">std::is_constructible_v</a></span><span class="o">&lt;</span><span class="n">T1</span><span class="p">,</span> <span class="n">U1</span><span class="o">&gt;</span> <span class="o">&amp;&amp;</span>
342342
<span class="n"><a href="../../reference/type_traits/is_constructible.html">std::is_constructible_v</a></span><span class="o">&lt;</span><span class="n">T2</span><span class="p">,</span> <span class="n">U2</span><span class="o">&gt;</span>
343343
<span class="k">explicit</span><span class="p">(</span><span class="o">!</span><span class="n"><a href="../../reference/type_traits/is_convertible.html">std::is_convertible_v</a></span><span class="o">&lt;</span><span class="n">U1</span><span class="p">,</span> <span class="n">T1</span><span class="o">&gt;</span> <span class="o">||</span> <span class="o">!</span><span class="n"><a href="../../reference/type_traits/is_convertible.html">std::is_convertible_v</a></span><span class="o">&lt;</span><span class="n">U2</span><span class="p">,</span> <span class="n">T2</span><span class="o">&gt;</span><span class="p">)</span>
344-
<span class="k">constexpr</span> <span class="n">pair</span><span class="p">(</span><span class="n">U1</span><span class="o">&amp;&amp;</span><span class="p">,</span> <span class="n">U2</span><span class="o">&amp;&amp;</span><span class="p">);</span>
344+
<span class="k">constexpr</span> <span class="n"><a href="../../reference/utility/pair.html">pair</a></span><span class="p">(</span><span class="n">U1</span><span class="o">&amp;&amp;</span><span class="p">,</span> <span class="n">U2</span><span class="o">&amp;&amp;</span><span class="p">);</span>
345345
<span class="p">};</span>
346346
</code></pre></div>
347347
</p>

0 commit comments

Comments
 (0)