Rumah > pembangunan bahagian belakang > C++ > Bila dan Mengapa Gunakan Kata Kunci `bolehubah` dalam C 11 Lambdas dengan Capture-by-Value?

Bila dan Mengapa Gunakan Kata Kunci `bolehubah` dalam C 11 Lambdas dengan Capture-by-Value?

Susan Sarandon
Lepaskan: 2024-11-28 01:07:14
asal
1060 orang telah melayarinya

When and Why Use the `mutable` Keyword in C  11 Lambdas with Capture-by-Value?

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
Salin selepas log masuk

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;}();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan