Skip to content

Commit 36565e9

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 61848a5 commit 36565e9

File tree

3,902 files changed

+10415
-10089
lines changed

Some content is hidden

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

3,902 files changed

+10415
-10089
lines changed

article/lib/disable_adl_function.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ <h1 itemprop="name"><span class="token">ADLを無効にする関数定義</span>
223223
<span class="p">}</span>
224224
</code></pre></div>
225225
</p>
226-
<p><code>#1</code>の箇所で呼ばれる関数は<code>std::distance</code>ではなく<code>std::ranges::distance</code>となる。オーバーロードの半順序においてはより特殊化されている関数テンプレートが選択されると言うルールがあり<code>std::distance</code>の方が<code>std::ranges::distance</code>よりも特殊化されている(イテレータ型と番兵型が1つのテンプレートパラメータで指定されている)が、それとは関係なく常に<code>std::ranges::distance</code>が選択される。</p>
226+
<p><code>#1</code>の箇所で呼ばれる関数は<code>std::distance</code>ではなく<code>std::ranges::distance</code>となる。<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>の半順序においてはより特殊化されている関数テンプレートが選択されると言うルールがあり<code>std::distance</code>の方が<code>std::ranges::distance</code>よりも特殊化されている(イテレータ型と番兵型が1つのテンプレートパラメータで指定されている)が、それとは関係なく常に<code>std::ranges::distance</code>が選択される。</p>
227227
<p>これは、<code>std::ranges</code>以下にあるこのような規定を持つ関数が通常の(修飾・非修飾名に対する)名前探索で見えているときは必ずそちらが選択されると言う事であり、その際は<a class="cpprefjp-defined-word" data-desc="実引数依存の名前探索 (Argument Dependent Lookup)。引数の型が所属する名前空間の関数を探索する言語機能">ADL</a>が行われない(無効化される)事を規定している。</p>
228228
<p><code>std::ranges</code>名前空間に追加される関数テンプレート群は、同名の<code>std</code>名前空間直下にある既存のものに対してC++20の<code>&lt;ranges&gt;</code>が規定するイテレータ/rangeコンセプトに適合するように再設計されたものであり、このような規定はC++20以降古い関数が意図せず使用されないようにするための処置であると考えられる。</p>
229229
<p>この性質は通常の関数では実現できず、これらの関数テンプレートは実のところ関数テンプレートではない。おそらく関数オブジェクトとして実装されるものと思われる。以下は、関数オブジェクトによる実装例である:</p>

article/lib/dont_use_noexcept.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,12 +211,12 @@
211211
<div class="col-sm-12 content-body">
212212

213213
<h1 itemprop="name"><span class="token">標準ライブラリにおける、関数にnoexceptを付けない条件</span></h1>
214-
<div itemprop="articleBody"><p>C++11から、<code>throw</code>キーワードを使用した関数の例外指示が非推奨になり、例外を投げないことを明示する<code>noexcept</code>キーワードが追加された。</p>
215-
<p>標準ライブラリも<code>noexcept</code>に対応しているが、仕様上、自然言語で「Throws: Nothing.(例外を投げない)」と書いてあって、<code>noexcept</code>が付いていないものがいくつか存在する。</p>
214+
<div itemprop="articleBody"><p>C++11から、<code>throw</code>キーワードを使用した関数の<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>指示が非推奨になり、<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>を投げないことを明示する<code>noexcept</code>キーワードが追加された。</p>
215+
<p>標準ライブラリも<code>noexcept</code>に対応しているが、仕様上、自然言語で「Throws: Nothing.(<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>を投げない)」と書いてあって、<code>noexcept</code>が付いていないものがいくつか存在する。</p>
216216
<p>たとえば、<code><a href="../../reference/mutex/mutex.html">std::mutex</a></code>クラスの<code><a href="../../reference/mutex/mutex/unlock.html">unlock()</a></code>メンバ関数には、<code>noexcept</code>が付いていない。</p>
217217
<p>これについては、「<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3279.pdf" target="_blank">N3279 - Conservative use of noexcept in the library</a>」のペーパーで論じられている。簡単に言えば、<code>noexcept</code>を付けない条件は以下のようになる:</p>
218-
<p>関数に事前条件が設定されている場合(<code>unlock()</code>の場合は、すでにアンロックされていないこと)、事前条件の不一致を報告するために、実装が例外を投げる場合がある。そういう関数に対しては、<code>noexcept</code>は付いていない。</p>
219-
<p>例外があることを前提としていない、C言語の互換ライブラリには、<code>noexcept</code>が付いている場合がある。たとえば、<code><a href="../../reference/atomic/atomic_exchange.html">atomic_exchange()</a></code>のような、<a href="../../reference/atomic.html">アトミックライブラリ</a>の関数などには、<code>noexcept</code>が付いている。</p>
218+
<p>関数に<a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Preconditions。関数呼び出し時に満たされていると関数が想定する条件。満たさなければ未定義の動作。契約属性の`[[expects]]`に相当">事前条件</a>が設定されている場合(<code>unlock()</code>の場合は、すでにアンロックされていないこと)、<a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Preconditions。関数呼び出し時に満たされていると関数が想定する条件。満たさなければ未定義の動作。契約属性の`[[expects]]`に相当">事前条件</a>の不一致を報告するために、実装が<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>を投げる場合がある。そういう関数に対しては、<code>noexcept</code>は付いていない。</p>
219+
<p><a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>があることを前提としていない、C言語の互換ライブラリには、<code>noexcept</code>が付いている場合がある。たとえば、<code><a href="../../reference/atomic/atomic_exchange.html">atomic_exchange()</a></code>のような、<a href="../../reference/atomic.html">アトミックライブラリ</a>の関数などには、<code>noexcept</code>が付いている。</p>
220220
<h2>関連項目</h2>
221221
<ul>
222222
<li><a href="../../lang/cpp11/noexcept.html">C++11 noexcept</a></li>

article/lib/hidden_friends.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,15 +246,15 @@ <h1 itemprop="name"><span class="token">Hidden Friends</span></h1>
246246
<span class="p">}</span>
247247
</code></pre></div>
248248
</p>
249-
<p>C++20以降の標準ライブラリでは一部のカスタマイゼーションポイントの関数や演算子オーバーロードが<em>Hidden Friends</em>として定義される様になる。また、標準ライブラリの実装によっては<em>Hidden Friends</em>と規定されていない既存の演算子オーバーロードを<em>Hidden Friends</em>として定義していることがある。</p>
249+
<p>C++20以降の標準ライブラリでは一部のカスタマイゼーションポイントの関数や演算子<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a><em>Hidden Friends</em>として定義される様になる。また、標準ライブラリの実装によっては<em>Hidden Friends</em>と規定されていない既存の演算子<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a><em>Hidden Friends</em>として定義していることがある。</p>
250250
<h2>利点</h2>
251251
<p><em>Hidden Friends</em><a class="cpprefjp-defined-word" data-desc="実引数依存の名前探索 (Argument Dependent Lookup)。引数の型が所属する名前空間の関数を探索する言語機能">ADL</a>経由でしか呼べず、名前空間スコープに露出しておらずクラスのインターフェースにも含まれないという性質から次の様な利点がある。</p>
252252
<ul>
253253
<li>暗黙変換による意図しない関数呼び出しの防止</li>
254254
<li>名前空間スコープ汚染の抑止</li>
255255
<li>クラスインターフェース増加の抑止</li>
256-
<li>(名前空間スコープに定義する時と比較して)オーバーロード候補の減少によるコンパイル時間の削減</li>
257-
<li>メンバとして定義することができない一部の演算子オーバーロードでは宣言を簡素化できる</li>
256+
<li>(名前空間スコープに定義する時と比較して)<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>候補の減少によるコンパイル時間の削減</li>
257+
<li>メンバとして定義することができない一部の演算子<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>では宣言を簡素化できる</li>
258258
</ul>
259259
<h2>Customization Point Object(<a class="cpprefjp-defined-word" data-desc="カスタマイゼーションポイントオブジェクト。プログラム定義型に対するオーバーロードが許されている標準関数名について、中でいい感じにオーバーロード解決して呼び出してくれる関数オブジェクト">CPO</a>)とHidden Friends</h2>
260260
<p>あるクラスについてカスタマイゼーションポイントにアダプトする時には、そこで求められる名前でメンバ関数もしくは非メンバ関数を定義することが求められる。しかし、その関数がそのクラスのインターフェースの一部としてそぐわない事から、関数を<em>Hidden Friends</em>として定義する事が好まれる場合がある。そのため、多くの<a class="cpprefjp-defined-word" data-desc="カスタマイゼーションポイントオブジェクト。プログラム定義型に対するオーバーロードが許されている標準関数名について、中でいい感じにオーバーロード解決して呼び出してくれる関数オブジェクト">CPO</a>は引数型に対して同名の<em>Hidden Friends</em>関数を探しに行くように定義されている。</p>

article/lib/how_to_use_cv.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ <h2>利用パターン</h2>
255255
一方、待機処理における指定条件によっては、<code>notify_one()</code>利用ではライブロック(live lock)に陥るケースも存在する。
256256
なお、<code>notify_all()</code>の動作セマンティクスは<code>notify_one()</code>を完全に包含するため、<code>notify_one()</code>で正しく動作する並行処理は<code>notify_all()</code>利用でも正しく動作する。)</p>
257257
<p>待機処理の実装では、第2引数に<a class="cpprefjp-defined-word" data-desc="boolを返す関数・関数オブジェクト。predicate">述語</a>をとる<code><a href="../../reference/condition_variable/condition_variable/wait.html">wait()</a></code>を利用することで、条件変数のSpurious Wakeupと呼ばれる現象を考慮しなくとも正しい処理を記述できる。
258-
<code>wait()</code>メンバ関数はロック型のみを引数にとる1引数オーバーロードも提供するが、特殊なケースを除いて上記の2引数オーバーロード利用を推奨する
258+
<code>wait()</code>メンバ関数はロック型のみを引数にとる1引数<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>も提供するが、特殊なケースを除いて上記の2引数<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>利用を推奨する
259259
待機関数によるブロッキング期間以外では、そのスレッド自身がロック<code>lk</code>保持中であると保証されるため、<a class="cpprefjp-defined-word" data-desc="boolを返す関数・関数オブジェクト。predicate">述語</a>処理(前掲実装ではラムダ式)や<code>wait()</code>呼出より後に"ステート"変数へと安全にアクセスできる。</p>
260260
<h2>条件変数と状態</h2>
261261
<p>条件変数オブジェクトはスレッド間通知/待機機能を提供するだけであり、オブジェクトそれ自身は永続的な状態管理を行わない。

implementation-compliance.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@
190190

191191
<h1 itemprop="name"><span class="token">標準規格と処理系</span></h1>
192192
<div itemprop="articleBody"><h2><a href="#summary" id="summary">概要</a></h2>
193-
<p>※ここでは各用語の日本語訳については、できるだけ JIS C++ (JIS X 3014:2003) に倣った。例外についてはそれぞれ注釈で説明を与える</p>
193+
<p>※ここでは各用語の日本語訳については、できるだけ JIS C++ (JIS X 3014:2003) に倣った。<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>についてはそれぞれ注釈で説明を与える</p>
194194
<h3><a href="#implementation-compliance" id="implementation-compliance">処理系の適合 (implementation compliance)</a></h3>
195195
<p><strong>処理系</strong> (implementation) または<strong>実装</strong>とはプログラムの<strong>翻訳</strong> (translation) と<strong>実行</strong> (execution) をする一連の枠組み・ソフトウェアのことである。
196196
C++ の処理系は、翻訳を担うコンパイラと実行を担うオペレーティングシステムから構成されるのが普通だが、後者は前提として特に前者を処理系と考えることも多い。

0 commit comments

Comments
 (0)