Menangkap Pembolehubah dalam Fungsi Lambda
Apabila menggunakan ungkapan lambda dalam panggilan fungsi, menangkap pembolehubah daripada skop yang disertakan adalah penting. Dalam konteks ini, ketidakupayaan untuk menangkap pembolehubah secara tersirat boleh membawa kepada ralat kompilasi, seperti "ralat C3493: 'pembolehubah "tidak boleh ditangkap secara tersirat...'"
Pertimbangkan coretan kod berikut:
<code class="cpp">int flagId = _ChildToRemove->getId(); auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(), [](Flag& device) { return device.getId() == flagId; }); m_FinalFlagsVec.erase(new_end, m_FinalFlagsVec.end());</code>
Kod ini cuba mengalih keluar elemen daripada vektor dalam C menggunakan fungsi lambda Lambda membandingkan medan ID setiap peranti dalam vektor m_FinalFlagsVec kepada flagId pembolehubah luaran, ID peranti yang akan menjadi. dialih keluar.
Walau bagaimanapun, pengkompil menimbulkan ralat yang dinyatakan di atas, menunjukkan bahawa pembolehubah flagId tidak disertakan dalam senarai tangkapan lambda untuk menyelesaikan isu ini, kami mesti menyatakan secara jelas pembolehubah yang hendak ditangkap daripada skop yang disertakan.
<code class="cpp">[flagId](Flag& device) { return device.getId() == flagId; }</code>
Dengan memasukkan flagId dalam senarai tangkapan, kami menunjukkan bahawa lambda akan mengakses pembolehubah flagId daripada skop yang disertakan. Beberapa mod tangkapan tersedia:
<.>Mengikut nilai: Pembolehubah disalin ke dalam penutupan lambda, menjadikannya tidak boleh diubah dalam lambda.
<code class="cpp">[flagId = std::as_const(flagId)](Flag& device) { // flagId is immutable within the lambda }</code>
Dengan rujukan: Pembolehubah dirujuk terus dalam lambda, membenarkan pengubahsuaian.
<code class="cpp">[&flagId](Flag& device) { // flagId can be modified within the lambda }</code>
Dengan rujukan boleh ubah: Sama seperti tangkapan melalui rujukan, tetapi membenarkan lambda mengubah suai yang ditangkap pembolehubah.
<code class="cpp">[mutable flagId](Flag& device) { // flagId can be modified within the lambda }</code>
Atas ialah kandungan terperinci Bagaimana untuk Menangkap Pembolehubah Secara Eksplisit dalam Fungsi Lambda untuk Menyelesaikan Ralat Penyusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!