Rumah >pembangunan bahagian belakang >C++ >Mengapakah C 11 Lambdas Capturing mengikut Nilai Boleh Berubah Secara Lalai?
Mutability dan Lambda Capture-by-Value dalam C 11
Ekspresi Lambda dalam C 11 membenarkan penangkapan pembolehubah luaran, sama ada dengan rujukan atau mengikut nilai. Walau bagaimanapun, apabila menangkap mengikut nilai, kata kunci boleh ubah diperlukan secara lalai. Ini telah mencetuskan persoalan mengenai keperluannya, terutamanya memandangkan parameter tradisional yang beralih kepada fungsi yang dinamakan tidak memerlukan kebolehubahan.
Rasional Di Sebalik Kebolehubahan
Perbezaan utama terletak pada sifat lambdas sebagai objek fungsi. Mereka direka untuk menghasilkan hasil yang konsisten dengan setiap doa. Jika ungkapan lambda boleh mengubah pembolehubah yang ditangkap tanpa mengisytiharkannya sebagai boleh ubah, ia akan melanggar prinsip ini. Akibatnya, lalai pengkompil menganggap bahawa pembolehubah tangkapan demi nilai harus kekal tidak diubah suai.
Pengisytiharan Boleh Ubah
Kata kunci boleh ubah membenarkan pengubahsuaian eksplisit tangkapan- pembolehubah nilai mengikut dalam ungkapan lambda. Ia mengakui bahawa objek fungsi bertujuan untuk berkelakuan berbeza berdasarkan keadaan semasanya. Contohnya, lambda di bawah menambah pembilang setiap kali ia dilaksanakan:
int n = 0; [mutable](){ n++; }();
Implikasi dan Alternatif
Keperluan untuk kebolehubah dalam tangkapan demi nilai memastikan bahawa lambdas mengekalkan tingkah laku deterministik. Ia juga menghapuskan keperluan untuk tangkapan mengikut rujukan dalam banyak kes di mana pembolehubah yang ditangkap tidak bertujuan untuk diubah suai secara luaran. Walau bagaimanapun, perlu diingat bahawa penggunaan berlebihan boleh ubah boleh menghalang kejelasan kod dan memperkenalkan potensi kesan sampingan.
Atas ialah kandungan terperinci Mengapakah C 11 Lambdas Capturing mengikut Nilai Boleh Berubah Secara Lalai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!