Rumah > pembangunan bahagian belakang > C++ > Bolehkah C 0x Lambda Captures Diubah Suai Tanpa Menjadi Const?

Bolehkah C 0x Lambda Captures Diubah Suai Tanpa Menjadi Const?

DDD
Lepaskan: 2024-10-30 13:28:01
asal
880 orang telah melayarinya

Can C  0x Lambda Captures Be Modified Without Being Const?

Bolehkah Tangkapan C 0x Lambda Diubah Suai tanpa Menjadi Konst?

Tangkapan Lambda dalam C 0x lazimnya menangkap pembolehubah melalui rujukan, yang sememangnya malar . Walau bagaimanapun, senario tertentu memerlukan pengubahsuaian pembolehubah yang ditangkap, menimbulkan persoalan, "Bolehkah nilai yang ditangkap dijadikan bukan const?"

Pertimbangkan functor perpustakaan, foo, dengan kaedah bukan const, operator(), yang perlu dipanggil dalam lambda. Coretan kod di bawah mencuba ini tetapi gagal untuk menyusun:

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

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

Ralat kompilasi timbul kerana operator() lambda secara tersirat ditandakan sebagai const kerana nilai yang ditangkap adalah malar. Untuk menyelesaikan isu ini, C 0x menyediakan kata kunci boleh ubah.

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

Dengan menambahkan boleh ubah, operator() lambda tidak lagi const, membenarkan pembolehubah yang ditangkap diubah suai dalam lambda. Ini membolehkan pengubahsuaian fungsi pustaka atau nilai tangkapan bukan const lain seperti yang diperlukan dalam lambdas.

Atas ialah kandungan terperinci Bolehkah C 0x Lambda Captures Diubah Suai Tanpa Menjadi Const?. 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