Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengubah Suai Nilai yang Ditangkap dalam C 0x Lambdas Apabila Menangkap Mengikut Nilai?

Bagaimanakah Saya Boleh Mengubah Suai Nilai yang Ditangkap dalam C 0x Lambdas Apabila Menangkap Mengikut Nilai?

DDD
Lepaskan: 2024-11-04 13:44:02
asal
791 orang telah melayarinya

How Can I Modify Captured Values in C  0x Lambdas When Capturing by Value?

Lambda Capture by Value: Memastikan Nilai Bukan Const Captured dalam C 0x

Apabila menangkap mengikut nilai dalam C 0x lambda expression, yang ditangkap nilai secara automatik dibuat malar. Ini boleh menjadi isu jika anda perlu mengubah suai nilai yang ditangkap dalam lambda.

Sebagai contoh, pertimbangkan lambda berikut yang menangkap struct foo mengikut nilai:

<code class="cpp">struct foo {
  bool operator() (const bool &a) {
    return a;
  }
};

int main(int argc, char* argv[]) {
  foo afoo;

  auto bar = [=] () -> bool {
    afoo(true);
  };

  return 0;
}</code>
Salin selepas log masuk

Kod ini akan tidak menyusun kerana kaedah operator() foo diisytiharkan sebagai const. Untuk membetulkan isu ini, anda boleh menjadikan kaedah operator() bukan const:

<code class="cpp">struct foo {
  bool operator() (bool &a) {
    return a;
  }
};</code>
Salin selepas log masuk

Walau bagaimanapun, ini bukan penyelesaian yang diingini. Dalam sesetengah kes, anda mungkin mahu menangkap nilai mengikut nilai tetapi masih memastikan ia tidak diubah suai dalam lambda.

Untuk mencapai ini, anda boleh menggunakan kata kunci boleh ubah. Dengan mengisytiharkan lambda sebagai [=] () boleh ubah -> bool, anda membenarkan lambda mengubah suai nilai yang ditangkap.

Contoh:

<code class="cpp">auto bar = [=] () mutable -> bool {
  afoo(true);
};</code>
Salin selepas log masuk

Dalam contoh ini, lambda kini boleh mengubah suai objek afoo yang ditangkap, walaupun walaupun ia ditangkap oleh nilai.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Suai Nilai yang Ditangkap dalam C 0x Lambdas Apabila Menangkap Mengikut Nilai?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan