Skip to content

Commit 38594f8

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 1f15155 commit 38594f8

4 files changed

Lines changed: 182 additions & 2497 deletions

File tree

reference/atomic/atomic_ref.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@
189189
<p class="text-right"><small>
190190
最終更新日時:
191191
<time itemprop="datePublished" class="js-local-time"
192-
datetime="2026-08-14T16:35:01+09:00">
193-
2026年08月14日 16時35分01秒 (JST)
192+
datetime="2026-08-28T11:29:30+09:00">
193+
2026年08月28日 11時29分30秒 (JST)
194194
</time>
195195
<br/>
196196
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -262,6 +262,7 @@ <h2>概要</h2>
262262
<li>(4) : 任意の型のポインタに対する特殊化</li>
263263
</ul>
264264
<p>C++26から、これらの特殊化は<a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>された型に対しても行われるようになった。</p>
265+
<p><code>atomic_ref&lt;T&gt;</code>は、<a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>のみが異なる<code>atomic_ref&lt;U&gt;</code>から構築できる。たとえば<code>atomic_ref&lt;int&gt;</code>から<code>atomic_ref&lt;const int&gt;</code>へ変換することで、読み取り専用の<code>atomic_ref</code>として扱える。</p>
265266
<p><code>T</code><code>const</code>修飾されている場合、参照先の値を変更するメンバ関数(<code><a href="atomic_ref/store.html">store</a></code><code><a href="atomic_ref/op_assign.html">operator=</a></code><code>fetch_*</code><code>store_*</code>系、複合代入演算子、<code><a href="atomic_ref/op_increment.html">operator++</a></code><code><a href="atomic_ref/op_decrement.html">operator--</a></code>など)は制約により無効化され、読み取り・待機系の操作(<code><a href="atomic_ref/load.html">load</a></code><code><a href="atomic_ref/wait.html">wait</a></code>など)のみが利用できる。</p>
266267
<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Constraints。関数であればオーバーロード解決に参加するための条件、それ以外であれば受け付ける型の条件">テンプレートパラメータ制約</a></h2>
267268
<ul>
@@ -827,6 +828,10 @@ <h3>参照</h3>
827828
<li>C++26で、<code>T</code><code>const</code>修飾されている場合に<code>store</code>をはじめとする値を変更するメンバ関数が制約により無効化されることが規定された</li>
828829
</ul>
829830
</li>
831+
<li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3860r1.html" target="_blank">P3860R1 Proposed Resolution for NB Comment GB13-309 <code>atomic_ref&lt;T&gt;</code> is not convertible to <code>atomic_ref&lt;const T&gt;</code></a><ul>
832+
<li>C++26で、<a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>のみが異なる<code>atomic_ref</code>から構築する<a href="atomic_ref/op_constructor.html">変換コンストラクタ</a>が追加された</li>
833+
</ul>
834+
</li>
830835
</ul></div>
831836

832837
</div>

reference/atomic/atomic_ref/op_constructor.html

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868

6969
</head>
7070
<body>
71-
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;atomic&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;class&#34;: [&#34;atomic_ref&#34;], &#34;id-type&#34;: [&#34;function&#34;], &#34;cpp&#34;: [&#34;cpp20&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;d6af361815015b2cd544f847fdf8bbbdbc17483b&#34;, &#34;source&#34;: &#34;#include &lt;atomic&gt;\n\nint main()\n{\n int value = 3;\n\n // value\u3092\u53c2\u7167\u3059\u308batomic_ref\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u69cb\u7bc9\n std::atomic_ref&lt;int&gt; a{value};\n\n // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u5f15\u6570\u306b\u3088\u3063\u3066\u3001\n // \u30af\u30e9\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5f15\u6570\u3092\u63a8\u8ad6 (&lt;int&gt;\u3092\u7701\u7565)\n std::atomic_ref b{value};\n\n // c\u3068b\u3067\u540c\u3058\u5024 (value) \u3092\u53c2\u7167\n std::atomic_ref c = b;\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;atomic&#34;, &#34;atomic_ref&#34;, &#34;op_constructor&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;atomic&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;class&#34;: [&#34;atomic_ref&#34;], &#34;id-type&#34;: [&#34;function&#34;], &#34;cpp&#34;: [&#34;cpp20&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;d6af361815015b2cd544f847fdf8bbbdbc17483b&#34;, &#34;source&#34;: &#34;#include &lt;atomic&gt;\n\nint main()\n{\n int value = 3;\n\n // value\u3092\u53c2\u7167\u3059\u308batomic_ref\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u69cb\u7bc9\n std::atomic_ref&lt;int&gt; a{value};\n\n // \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u5f15\u6570\u306b\u3088\u3063\u3066\u3001\n // \u30af\u30e9\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5f15\u6570\u3092\u63a8\u8ad6 (&lt;int&gt;\u3092\u7701\u7565)\n std::atomic_ref b{value};\n\n // c\u3068b\u3067\u540c\u3058\u5024 (value) \u3092\u53c2\u7167\n std::atomic_ref c = b;\n}\n&#34;}, {&#34;id&#34;: &#34;90c7537e3071792c8dd45d7f6ea7b8dbbb0bdd35&#34;, &#34;source&#34;: &#34;#include &lt;atomic&gt;\n#include &lt;iostream&gt;\n\nint main()\n{\n int value = 3;\n std::atomic_ref&lt;int&gt; a{value};\n\n // \u8aad\u307f\u53d6\u308a\u5c02\u7528\u306eatomic_ref&lt;const int&gt;\u3078\u5909\u63db\u3059\u308b\n std::atomic_ref&lt;const int&gt; b = a;\n\n std::cout &lt;&lt; b.load() &lt;&lt; std::endl;\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;atomic&#34;, &#34;atomic_ref&#34;, &#34;op_constructor&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -201,8 +201,8 @@
201201
<p class="text-right"><small>
202202
最終更新日時:
203203
<time itemprop="datePublished" class="js-local-time"
204-
datetime="2026-08-12T15:34:41+09:00">
205-
2026年08月12日 15時34分41秒 (JST)
204+
datetime="2026-08-28T11:29:30+09:00">
205+
2026年08月28日 11時29分30秒 (JST)
206206
</time>
207207
<br/>
208208
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -256,25 +256,41 @@
256256
<span class="k">constexpr</span><span class="w"> </span><span class="n">atomic_ref</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">atomic_ref</span><span class="o">&amp;</span><span class="w"> </span><span class="n">other</span><span class="p">)</span><span class="w"> </span><span class="k">noexcept</span><span class="p">;</span><span class="w"> </span><span class="c1">// (2) C++26</span>
257257

258258
<span class="k">explicit</span><span class="w"> </span><span class="n">atomic_ref</span><span class="p">(</span><span class="n">T</span><span class="o">&amp;&amp;</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">delete</span><span class="p">;</span><span class="w"> </span><span class="c1">// (3) C++26</span>
259+
260+
<span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="k">class</span><span class="w"> </span><span class="nc">U</span><span class="o">&gt;</span>
261+
<span class="k">constexpr</span><span class="w"> </span><span class="n">atomic_ref</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">atomic_ref</span><span class="o">&lt;</span><span class="n">U</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">other</span><span class="p">)</span><span class="w"> </span><span class="k">noexcept</span><span class="p">;</span><span class="w"> </span><span class="c1">// (4) C++26</span>
259262
</code></pre></div>
260263
</p>
261264
<h2>概要</h2>
262265
<ul>
263266
<li>(1) : <code>obj</code>を参照して<code>*this</code>にポインタとして保持する</li>
264267
<li>(2) : コピーコンストラクタ。<code>other</code>が参照するオブジェクトを<code>*this</code>もまた参照する</li>
265268
<li>(3) : 一時オブジェクト(右辺値)を参照する<code>atomic_ref</code>が構築されるのを防ぐため、<code>delete</code>定義されている</li>
269+
<li>(4) : 変換コンストラクタ。<a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>のみが異なる<code>atomic_ref&lt;U&gt;</code>から構築し、<code>other</code>が参照するオブジェクトを<code>*this</code>もまた参照する</li>
270+
</ul>
271+
<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Constraints。関数であればオーバーロード解決に参加するための条件、それ以外であれば受け付ける型の条件">テンプレートパラメータ制約</a></h2>
272+
<ul>
273+
<li>(4) : <code>T</code><code>U</code>が類似の型 (similar type) であり、<code><a href="../../type_traits/is_convertible.html">is_convertible_v</a>&lt;U*, T*&gt;</code><code>true</code>であること<ul>
274+
<li>類似の型とは、<a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>を除いて同じ型であることをいう。つまり<code>atomic_ref&lt;int&gt;</code>から<code>atomic_ref&lt;const int&gt;</code>のように、<a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>を加える方向にのみ変換できる</li>
275+
</ul>
276+
</li>
266277
</ul>
267278
<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Preconditions。関数呼び出し時に満たされていると関数が想定する条件。満たさなければ未定義の動作。契約属性の`[[expects]]`に相当">事前条件</a></h2>
268279
<ul>
269280
<li>参照するオブジェクトがメンバ定数のアライメント値<code>required_alignment</code>にアライメントされていること</li>
270281
</ul>
271282
<h2><a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a></h2>
272283
<p>投げない</p>
284+
<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Postconditions。関数を実行後に満たされている条件。契約属性の`[[ensures]]`に相当">事後条件</a></h2>
285+
<ul>
286+
<li>(4) : <code>*this</code>は、<code>other</code>が参照しているオブジェクトを参照する</li>
287+
</ul>
273288
<h2>備考</h2>
274289
<ul>
275290
<li>デフォルトコンストラクタは定義されない</li>
276291
</ul>
277292
<h2></h2>
293+
<h3>基本的な使い方</h3>
278294
<p><div class="yata" id="d6af361815015b2cd544f847fdf8bbbdbc17483b"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../../atomic.html">&lt;atomic&gt;</a></span>
279295

280296
<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span>
@@ -293,8 +309,27 @@ <h2>例</h2>
293309
<span class="p">}</span>
294310
</code></pre></div>
295311
</div></p>
296-
<h3>出力</h3>
312+
<h4>出力</h4>
297313
<p><pre><code></code></pre></p>
314+
<h3><a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>の異なる<code>atomic_ref</code>へ変換する (C++26)</h3>
315+
<p><div class="yata" id="90c7537e3071792c8dd45d7f6ea7b8dbbb0bdd35"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../../atomic.html">&lt;atomic&gt;</a></span>
316+
<span class="cp">#include <a href="../../iostream.html">&lt;iostream&gt;</a></span>
317+
318+
<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span>
319+
<span class="p">{</span>
320+
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span>
321+
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">atomic_ref</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">a</span><span class="p">{</span><span class="n">value</span><span class="p">};</span>
322+
323+
<span class="w"> </span><span class="c1">// 読み取り専用のatomic_ref&lt;const int&gt;へ変換する</span>
324+
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">atomic_ref</span><span class="o">&lt;</span><span class="k">const</span><span class="w"> </span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="p">;</span>
325+
326+
<span class="w"> </span><span class="n"><a href="../../iostream/cout.html">std::cout</a></span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">load</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n"><a href="../../ostream/endl.html">std::endl</a></span><span class="p">;</span>
327+
<span class="p">}</span>
328+
</code></pre></div>
329+
</div></p>
330+
<h4>出力</h4>
331+
<p><pre><code>3
332+
</code></pre></p>
298333
<h2>バージョン</h2>
299334
<h3>言語</h3>
300335
<ul>
@@ -317,6 +352,10 @@ <h2>参照</h2>
317352
<li>C++26で、一時オブジェクト(右辺値)からの構築を禁止する<code>delete</code>定義されたコンストラクタ (3) が追加された</li>
318353
</ul>
319354
</li>
355+
<li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3860r1.html" target="_blank">P3860R1 Proposed Resolution for NB Comment GB13-309 <code>atomic_ref&lt;T&gt;</code> is not convertible to <code>atomic_ref&lt;const T&gt;</code></a><ul>
356+
<li>C++26で、<a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>のみが異なる<code>atomic_ref</code>から構築する変換コンストラクタ (4) が追加された。C++26で<a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>された型に対応した際 (P3323R1) に、この変換が考慮されていなかったことへの対応</li>
357+
</ul>
358+
</li>
320359
</ul></div>
321360

322361
</div>

0 commit comments

Comments
 (0)