Kata Kunci Boleh Berubah dalam C 11 Lambdas untuk Capture-by-Value
Capture-by-value dalam C 11 lambdas membenarkan lambda untuk menangkap pembolehubah daripada skopnya dengan membuat salinan. Walau bagaimanapun, secara lalai, salinan ini ditandakan sebagai tidak boleh ubah, bermakna lambda tidak boleh mengubah suainya.
Rasional untuk Kebolehubahan
Sebab tingkah laku lalai ini berpunca daripada asas prinsip objek fungsi: mereka harus menghasilkan hasil yang sama setiap kali mereka dipanggil. Jika lambda boleh mengubah suai pembolehubah yang ditangkap, ia akan melanggar prinsip ini.
Dengan menggunakan kata kunci boleh ubah, pengaturcara secara eksplisit mengisytiharkan bahawa lambda boleh mengubah suai pembolehubah yang ditangkap. Kelonggaran ini diperlukan kerana tangkapan demi nilai direka bentuk untuk membolehkan pengguna lambda menukar tangkapan sementara. Dalam kes ini, masuk akal untuk membenarkan pengubahsuaian di bawah kawalan pengaturcara.
Contoh
Pertimbangkan coretan kod yang anda berikan:
// ... // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda
Kod ini akan membuang ralat kerana lambda menangkap n mengikut nilai dan cuba mengubah suainya tanpa menggunakan kata kunci boleh ubah. Untuk menjadikan kod ini sah, gunakan boleh ubah:
// ... [=]() mutable {n = 10;}();
Kesimpulan
Kata kunci boleh ubah dalam C 11 lambdas untuk tangkapan demi nilai berfungsi sebagai peringatan bahawa fungsi objek secara amnya harus menghasilkan hasil yang konsisten. Apabila perlu mengubah suai pembolehubah yang ditangkap, kata kunci boleh ubah secara eksplisit membenarkannya. Dengan memahami rasional ini, pengaturcara boleh menggunakan lambdas dengan berkesan dan mengelakkan kemungkinan ralat.
Atas ialah kandungan terperinci Bila dan Mengapa Gunakan Kata Kunci `bolehubah` dalam C 11 Lambdas dengan Capture-by-Value?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!