189189 < p class ="text-right "> < small >
190190 最終更新日時:
191191 < time itemprop ="datePublished " class ="js-local-time "
192- datetime ="2026-09-05T09:27:26 +09:00 ">
193- 2026年09月05日 09時27分26秒 (JST)
192+ datetime ="2026-09-05T09:40:12 +09:00 ">
193+ 2026年09月05日 09時40分12秒 (JST)
194194 </ time >
195195 < br />
196196 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -245,9 +245,9 @@ <h1 itemprop="name"><span class="token">ラムダ式のキャプチャが書か
245245</ p >
246246< h2 > 概要</ h2 >
247247< p > C++26までの規格では、ラムダ式のキャプチャに対応するクロージャ型のメンバ変数の宣言順は< a class ="cpprefjp-defined-word " data-desc ="未規定の動作。事前の断りなく処理系によって異なる動作をする " href ="../../implementation-compliance.html#dfn-unspecified-behavior "> 未規定</ a > であり、キャプチャの初期化もその< a class ="cpprefjp-defined-word " data-desc ="未規定の動作。事前の断りなく処理系によって異なる動作をする " href ="../../implementation-compliance.html#dfn-unspecified-behavior "> 未規定</ a > の順序で行われていた。そのため、次のようなコードは安全ではなかった。</ p >
248- < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> auto</ span > < span class ="w "> </ span > < span class ="n "> x</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> std </ span > < span class =" o " > :: </ span > < span class =" n " > make_unique </ span > < span class ="o "> <</ span > < span class ="kt "> int</ span > < span class ="o "> ></ span > < span class ="p "> ();</ span >
248+ < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> auto</ span > < span class ="w "> </ span > < span class ="n "> x</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> < a href =" ../../reference/memory/make_unique.html " > std::make_unique </ a > </ span > < span class ="o "> <</ span > < span class ="kt "> int</ span > < span class ="o "> ></ span > < span class ="p "> ();</ span >
249249< span class ="p "> [</ span > < span class ="n "> value</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="o "> *</ span > < span class ="n "> x</ span > < span class ="p "> ,</ span >
250- < span class ="w "> </ span > < span class ="n "> lifetime</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> std </ span > < span class =" o " > :: </ span > < span class =" n " > move </ span > < span class ="p "> (</ span > < span class ="n "> x</ span > < span class ="p "> )]</ span > < span class ="w "> </ span > < span class ="p "> {};</ span >
250+ < span class ="w "> </ span > < span class ="n "> lifetime</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> < a href =" ../../reference/utility/move.html " > std::move </ a > </ span > < span class ="p "> (</ span > < span class ="n "> x</ span > < span class ="p "> )]</ span > < span class ="w "> </ span > < span class ="p "> {};</ span >
251251</ code > </ pre > </ div >
252252</ p >
253253< p > < code > value</ code > より先に< code > lifetime</ code > が初期化される実装では、< code > *x</ code > の読み取りの前に< code > x</ code > からのムーブが行われてしまう。破棄の順序も同様に< a class ="cpprefjp-defined-word " data-desc ="未規定の動作。事前の断りなく処理系によって異なる動作をする " href ="../../implementation-compliance.html#dfn-unspecified-behavior "> 未規定</ a > だった。</ p >
@@ -273,7 +273,7 @@ <h2>例</h2>
273273
274274< span class ="w "> </ span > < span class ="c1 "> // 明示的なキャプチャは、書かれた順に初期化されることが保証される。</ span >
275275< span class ="w "> </ span > < span class ="c1 "> // sizeの初期化はownへのムーブより前に行われるため、元の要素数が得られる</ span >
276- < span class ="w "> </ span > < span class ="k "> auto</ span > < span class ="w "> </ span > < span class ="n "> f</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="n "> size</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../reference/vector/vector/size.html "> v.size()</ a > </ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> own</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> std </ span > < span class =" o " > :: </ span > < span class =" n " > move </ span > < span class ="p "> (</ span > < span class ="n "> v</ span > < span class ="p "> )]</ span > < span class ="w "> </ span > < span class ="p "> {</ span >
276+ < span class ="w "> </ span > < span class ="k "> auto</ span > < span class ="w "> </ span > < span class ="n "> f</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="n "> size</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../reference/vector/vector/size.html "> v.size()</ a > </ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> own</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> < a href =" ../../reference/utility/move.html " > std::move </ a > </ span > < span class ="p "> (</ span > < span class ="n "> v</ span > < span class ="p "> )]</ span > < span class ="w "> </ span > < span class ="p "> {</ span >
277277< span class ="w "> </ span > < span class ="n "> < a href ="../../reference/iostream/cout.html "> std::cout</ a > </ span > < span class ="w "> </ span > < span class ="o "> <<</ span > < span class ="w "> </ span > < span class ="n "> size</ span > < span class ="w "> </ span > < span class ="o "> <<</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../reference/ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
278278< span class ="w "> </ span > < span class ="p "> };</ span >
279279< span class ="w "> </ span > < span class ="n "> f</ span > < span class ="p "> ();</ span >
0 commit comments