Adakah Lambda Capture mengikut Nilai Sentiasa Malar dalam C 0x?

Linda Hamilton
Lepaskan: 2024-10-30 19:42:30
asal
253 orang telah melayarinya

Is Lambda Capture by Value Always Constant in C  0x?

Lambda Capture by Value Sentiasa Malar dalam C 0x?

Isu ini timbul apabila cuba menangkap nilai melalui rujukan tetapi mengubah suai kandungannya dalam ungkapan lambda. Pengkompil menganggap nilai yang ditangkap sebagai pemalar secara lalai, memastikan ia kekal tidak berubah. Walau bagaimanapun, sesetengah senario mungkin memerlukan akses bukan const kepada nilai yang ditangkap.

Memahami Tangkapan Mengikut Nilai:
Dalam C 0x, fungsi lambda boleh menangkap pembolehubah mengikut nilai atau rujukan. Apabila menangkap mengikut nilai, salinan pembolehubah dibuat dalam skop lambda, membenarkan pengubahsuaian dalam lambda. Walau bagaimanapun, secara lalai, salinan yang ditangkap dianggap sebagai tetap, menghalang pengubahsuaiannya.

Kata Kunci Boleh Berubah untuk Penyelamat:
Untuk mengatasi had ini, kata kunci boleh ubah boleh digunakan. Dengan mendahului boleh ubah pada senarai parameter lambda, kami mengisytiharkan nilai yang ditangkap secara eksplisit sebagai boleh diubah suai dalam skop lambda. Ini membolehkan akses bukan const kepada nilai yang ditangkap, menyelesaikan isu yang diterangkan dalam coretan kod yang disediakan.

Contoh:
Pertimbangkan kod berikut yang cuba menangkap nilai melalui rujukan dan memanggil bukan const kaedah:

struct foo
{
operator bool () ( const bool & a )
{

return a;
Salin selepas log masuk

}
};

int main()
{
foo afoo;

bar auto = [=] () -> bool

{
  afoo(true);
};
Salin selepas log masuk

return 0;
}

Dalam kod ini, making foo::operator() const menyelesaikan isu kompilasi. Walau bagaimanapun, penggunaan boleh ubah terus dalam ungkapan lambda memberikan fleksibiliti yang lebih besar dan membolehkan akses bukan const kepada nilai yang ditangkap tanpa mengubah suai pengisytiharan asal

Atas ialah kandungan terperinci Adakah Lambda Capture mengikut Nilai Sentiasa Malar dalam C 0x?. 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