|
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