Bolehkah Tangkapan C 0x Lambda Diubah Suai tanpa Menjadi Konst?
Tangkapan Lambda dalam C 0x lazimnya menangkap pembolehubah melalui rujukan, yang sememangnya malar . Walau bagaimanapun, senario tertentu memerlukan pengubahsuaian pembolehubah yang ditangkap, menimbulkan persoalan, "Bolehkah nilai yang ditangkap dijadikan bukan const?"
Pertimbangkan functor perpustakaan, foo, dengan kaedah bukan const, operator(), yang perlu dipanggil dalam lambda. Coretan kod di bawah mencuba ini tetapi gagal untuk menyusun:
<code class="c++">struct foo { bool operator () ( const bool & a ) { return a; } }; auto bar = [=] () -> bool { afoo(true); };</code>
Ralat kompilasi timbul kerana operator() lambda secara tersirat ditandakan sebagai const kerana nilai yang ditangkap adalah malar. Untuk menyelesaikan isu ini, C 0x menyediakan kata kunci boleh ubah.
<code class="c++">auto bar = [=] () mutable -> bool { afoo(true); };</code>
Dengan menambahkan boleh ubah, operator() lambda tidak lagi const, membenarkan pembolehubah yang ditangkap diubah suai dalam lambda. Ini membolehkan pengubahsuaian fungsi pustaka atau nilai tangkapan bukan const lain seperti yang diperlukan dalam lambdas.
Atas ialah kandungan terperinci Bolehkah C 0x Lambda Captures Diubah Suai Tanpa Menjadi Const?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!