|
28 | 28 | <meta property="og:url" content="https://cpprefjp.github.io/reference/functional/function/op_constructor.html" />
|
29 | 29 | <meta property="og:site_name" content="cpprefjp - C++日本語リファレンス" />
|
30 | 30 | <meta property="og:type" content="article" />
|
31 |
| - <meta property="og:description" content="function&lt;functional&gt;std::function::コンストラクタ(C++11) function() noexcept; // (1) function(nullptr_t) noexcept; // (2) function(const function&amp; f); // (3) function(function&amp;&amp; " /> |
| 31 | + <meta property="og:description" content="`function`オブジェクトを構築する。" /> |
32 | 32 | <meta name="twitter:card" content="summary" />
|
33 | 33 | <meta name="twitter:title" content="function::コンストラクタ - cpprefjp C++日本語リファレンス" />
|
34 | 34 | <meta name="twitter:url" content="https://cpprefjp.github.io/reference/functional/function/op_constructor.html" />
|
35 |
| - <meta name="twitter:description" content="function&lt;functional&gt;std::function::コンストラクタ(C++11) function() noexcept; // (1) function(nullptr_t) noexcept; // (2) function(const function&amp; f); // (3) function(function&amp;&amp; " /> |
| 35 | + <meta name="twitter:description" content="`function`オブジェクトを構築する。" /> |
36 | 36 |
|
37 | 37 |
|
38 | 38 | <link rel="alternate" type="application/atom+xml" title="Atom" href="https://cpprefjp.github.io/rss.xml" />
|
|
200 | 200 |
|
201 | 201 | <p class="text-right"><small>
|
202 | 202 | 最終更新日時(UTC):
|
203 |
| - <span itemprop="datePublished" content="2024-11-02T18:25:04"> |
204 |
| - 2024年11月02日 18時25分04秒 |
| 203 | + <span itemprop="datePublished" content="2024-11-02T19:55:08"> |
| 204 | + 2024年11月02日 19時55分08秒 |
205 | 205 | </span>
|
206 | 206 | <br/>
|
207 | 207 | <span itemprop="author" itemscope itemtype="http://schema.org/Person">
|
208 |
| - <span itemprop="name">biobios</span> |
| 208 | + <span itemprop="name">Akira Takahashi</span> |
209 | 209 | </span>
|
210 | 210 | が更新
|
211 | 211 | </small></p>
|
|
225 | 225 | <div class="col-sm-12 content-body">
|
226 | 226 |
|
227 | 227 | <div class="identifier-type">function</div><div class="header"><functional></div><h1 itemprop="name"><span class="namespace" title="namespace std">std::</span><span class="class" title="class function">function::</span><span class="token">コンストラクタ</span><span class="cpp cpp11" title="C++11で追加">(C++11)</span></h1>
|
228 |
| -<div itemprop="articleBody"><p><div class="codehilite"><pre><span></span><code><span class="n">function</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span> <span class="c1">// (1)</span> |
229 |
| -<span class="n">function</span><span class="p">(</span><span class="n"><a href="../../cstddef/nullptr_t.html">nullptr_t</a></span><span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span> <span class="c1">// (2)</span> |
230 |
| -<span class="n">function</span><span class="p">(</span><span class="k">const</span> <span class="n">function</span><span class="o">&</span> <span class="n">f</span><span class="p">);</span> <span class="c1">// (3)</span> |
| 228 | +<div itemprop="articleBody"><p><div class="codehilite"><pre><span></span><code><span class="n">function</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span> <span class="c1">// (1) C++11</span> |
| 229 | +<span class="n">function</span><span class="p">(</span><span class="n"><a href="../../cstddef/nullptr_t.html">nullptr_t</a></span><span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span> <span class="c1">// (2) C++11</span> |
| 230 | +<span class="n">function</span><span class="p">(</span><span class="k">const</span> <span class="n">function</span><span class="o">&</span> <span class="n">f</span><span class="p">);</span> <span class="c1">// (3) C++11</span> |
231 | 231 |
|
232 |
| -<span class="n">function</span><span class="p">(</span><span class="n">function</span><span class="o">&&</span> <span class="n">f</span><span class="p">);</span> <span class="c1">// (4) C++17まで</span> |
| 232 | +<span class="n">function</span><span class="p">(</span><span class="n">function</span><span class="o">&&</span> <span class="n">f</span><span class="p">);</span> <span class="c1">// (4) C++11</span> |
233 | 233 | <span class="n">function</span><span class="p">(</span><span class="n">function</span><span class="o">&&</span> <span class="n">f</span><span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span> <span class="c1">// (4) C++20</span>
|
234 | 234 |
|
235 | 235 | <span class="k">template</span> <span class="o"><</span><span class="k">class</span> <span class="nc">F</span><span class="o">></span>
|
236 |
| -<span class="n">function</span><span class="p">(</span><span class="n">F</span><span class="o">&&</span> <span class="n">f</span><span class="p">);</span> <span class="c1">// (5)</span> |
| 236 | +<span class="n">function</span><span class="p">(</span><span class="n">F</span> <span class="n">f</span><span class="p">);</span> <span class="c1">// (5) C++11</span> |
| 237 | +<span class="k">template</span> <span class="o"><</span><span class="k">class</span> <span class="nc">F</span><span class="o">></span> |
| 238 | +<span class="n">function</span><span class="p">(</span><span class="n">F</span><span class="o">&&</span> <span class="n">f</span><span class="p">);</span> <span class="c1">// (5) C++23</span> |
237 | 239 |
|
238 | 240 | <span class="k">template</span> <span class="o"><</span><span class="k">class</span> <span class="nc">Alloc</span><span class="o">></span>
|
239 | 241 | <span class="n">function</span><span class="p">(</span><span class="n"><a href="../../memory/allocator_arg_t.html">allocator_arg_t</a></span><span class="p">,</span> <span class="k">const</span> <span class="n">Alloc</span><span class="o">&</span> <span class="n">alloc</span><span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span> <span class="c1">// (6) C++17で削除</span>
|
|
251 | 253 | <span class="n">function</span><span class="p">(</span><span class="n"><a href="../../memory/allocator_arg_t.html">allocator_arg_t</a></span><span class="p">,</span> <span class="k">const</span> <span class="n">Alloc</span><span class="o">&</span> <span class="n">alloc</span><span class="p">,</span> <span class="n">F</span> <span class="n">f</span><span class="p">);</span> <span class="c1">// (10) C++17で削除</span>
|
252 | 254 | </code></pre></div>
|
253 | 255 | </p>
|
254 |
| -<h2>要件</h2> |
| 256 | +<h2>概要</h2> |
| 257 | +<p><code>function</code>オブジェクトを構築する。</p> |
| 258 | +<ul> |
| 259 | +<li>(1) : <a class="cpprefjp-defined-word" data-desc="デフォルト初期化。`T x;`構文での初期化。トリビアルにデフォルト構築可能な型の場合は初期化されず(オブジェクトのlifetimeは開始される)、そうではないクラス型はデフォルトコンストラクタで初期化する。配列型の場合は各要素が再帰的にデフォルト初期化される">デフォルト構築</a>。空の<code>function</code>オブジェクトを構築する</li> |
| 260 | +<li>(2) : <code>nullptr</code>からの構築。空の<code>function</code>オブジェクトを構築する</li> |
| 261 | +<li>(3) : コピー構築する</li> |
| 262 | +<li>(4) : ムーブ構築する</li> |
| 263 | +<li>(5) : 任意の型の関数ポインタ、メンバポインタ、関数オブジェクトを受け取って構築する</li> |
| 264 | +<li>(6) : アロケータをとって空の<code>function</code>オブジェクトを構築する</li> |
| 265 | +<li>(7) : アロケータと<code>nullptr</code>をとって空の<code>function</code>オブジェクトを構築する</li> |
| 266 | +<li>(8) : アロケータをとってコピー構築する</li> |
| 267 | +<li>(9) : アロケータをとってムーブ構築する</li> |
| 268 | +<li>(10) : アロケータと、任意の型の関数ポインタ、メンバポインタ、関数オブジェクトを受け取って構築する</li> |
| 269 | +</ul> |
| 270 | +<h2><a class="cpprefjp-defined-word" data-desc="関数であればオーバーロード解決に参加するための条件、それ以外であれば受け付ける型の条件">テンプレートパラメータ制約</a></h2> |
| 271 | +<p><code><a href="../../type_traits/decay.html">decay_t</a><F></code>を<code>FD</code>として、</p> |
255 | 272 | <ul>
|
256 |
| -<li>(5), (10) :<ul> |
257 |
| -<li><code>F</code>はコピー構築可能であること。</li> |
258 |
| -<li><code>F</code>のコピーコンストラクタとデストラクタは、例外を投げるべきではない。</li> |
259 |
| -<li>C++11まで : <code>F</code>は、パラメータとして<code>ArgTypes...</code>型をとり、戻り値として<code>R</code>型を返す関数ポインタ、メンバ関数ポインタ、メンバ変数ポインタ、または関数オブジェクトであること。</li> |
| 273 | +<li>(5) :<ul> |
| 274 | +<li>C++11<ul> |
| 275 | +<li><code>F</code>は、パラメータとして<code>ArgTypes...</code>型をとり、戻り値として<code>R</code>型を返す関数ポインタ、メンバ関数ポインタ、メンバ変数ポインタ、または関数オブジェクトであること</li> |
| 276 | +</ul> |
| 277 | +</li> |
| 278 | +<li>C++23<ul> |
| 279 | +<li><code>F</code>が<code>function</code>ではないこと</li> |
| 280 | +<li><code>FD</code>は、パラメータとして<code>ArgTypes...</code>型をとり、戻り値として<code>R</code>型を返す関数ポインタ、メンバ関数ポインタ、メンバ変数ポインタ、または関数オブジェクトであること</li> |
| 281 | +</ul> |
| 282 | +</li> |
| 283 | +</ul> |
| 284 | +</li> |
| 285 | +<li>(10) :<ul> |
| 286 | +<li><code>F</code>はコピー構築可能であること</li> |
| 287 | +<li><code>F</code>のコピーコンストラクタとデストラクタは、例外を投げるべきではない</li> |
| 288 | +<li><code>F</code>は、パラメータとして<code>ArgTypes...</code>型をとり、戻り値として<code>R</code>型を返す関数ポインタ、メンバ関数ポインタ、メンバ変数ポインタ、または関数オブジェクトであること</li> |
| 289 | +</ul> |
| 290 | +</li> |
| 291 | +</ul> |
| 292 | +<h2><a class="cpprefjp-defined-word" data-desc="満たさなければプログラムが不適格となる要件。`static_assert`や関数のdelete宣言などに相当する">適格要件</a></h2> |
| 293 | +<ul> |
| 294 | +<li>(5) :<ul> |
| 295 | +<li>C++11<ul> |
| 296 | +<li><code>F</code>はコピー構築可能であること</li> |
| 297 | +<li><code>F</code>は、パラメータとして<code>ArgTypes...</code>型をとり、戻り値として<code>R</code>型を返す関数ポインタ、メンバ関数ポインタ、メンバ変数ポインタ、または関数オブジェクトであること。</li> |
| 298 | +</ul> |
| 299 | +</li> |
| 300 | +<li>C++23<ul> |
| 301 | +<li><code>FD</code>はコピー構築可能であること</li> |
| 302 | +<li><code>FD</code>は<code>F</code>から構築可能であること</li> |
| 303 | +</ul> |
| 304 | +</li> |
260 | 305 | </ul>
|
261 | 306 | </li>
|
262 | 307 | </ul>
|
@@ -460,6 +505,10 @@ <h2>参照</h2>
|
460 | 505 | </li>
|
461 | 506 | <li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0302r1.html" target="_blank">P0302R1 Removing Allocator Support in <code>std::function</code> (rev 1)</a></li>
|
462 | 507 | <li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0771r1.pdf" target="_blank">P0771R1 std::function move constructor should be noexcept</a></li>
|
| 508 | +<li><a href="https://cplusplus.github.io/LWG/issue2774" target="_blank">LWG Issue 2774. <code>std::function</code> construction vs assignment</a><ul> |
| 509 | +<li>C++23から、<code>function(F)</code>のオーバーロードが<code>function(F&&)</code>に変更された</li> |
| 510 | +</ul> |
| 511 | +</li> |
463 | 512 | </ul></div>
|
464 | 513 |
|
465 | 514 | </div>
|
|
0 commit comments