Alasan [&this]tidak berhasil adalah karena ini adalah kesalahan sintaks. Setiap parameter yang dipisahkan koma di lambda-introduceris a capture:
capture:
identifier
& identifier
this
Anda dapat melihat itu &thistidak diperbolehkan secara sintaksis. Alasan itu tidak diizinkan adalah karena Anda tidak ingin menangkap thisdengan referensi, karena ini adalah penunjuk const kecil. Anda hanya ingin meneruskannya berdasarkan nilai - jadi bahasanya tidak mendukung penangkapan thisdengan referensi.
Untuk menangkap thissecara eksplisit Anda dapat menggunakan [this]file lambda-introducer.
Yang pertama capturebisa jadi capture-defaultadalah:
capture-default:
&
=
Ini berarti menangkap secara otomatis apa pun yang saya gunakan, masing-masing dengan referensi ( &) atau dengan nilai ( =) - namun perlakuannya thiskhusus - dalam kedua kasus itu ditangkap oleh nilai untuk alasan yang diberikan sebelumnya (bahkan dengan tangkapan default &, yang biasanya berarti ditangkap dengan referensi).
5.1.2.7/8:
Untuk tujuan pencarian nama (3.4), menentukan jenis dan nilai this(9.3.2) dan mengubah ekspresi id yang mengacu pada anggota kelas non-statis menjadi ekspresi akses anggota kelas menggunakan (*this)(9.3.1), pernyataan gabungan [OF THE LAMBDA] dianggap dalam konteks ekspresi lambda.
Jadi lambda bertindak seolah-olah itu adalah bagian dari fungsi anggota yang melingkupi saat menggunakan nama anggota (seperti dalam contoh Anda, penggunaan nama x), sehingga akan menghasilkan "penggunaan implisit" thisseperti fungsi anggota.
Jika lambda-capture menyertakan capture-default yaitu &, pengidentifikasi dalam lambda-capture tidak boleh didahului oleh &. Jika lambda-capture menyertakan capture-default yaitu =, lambda-capture tidak boleh berisi
thisdan setiap pengenal yang dikandungnya harus diawali dengan &. Pengidentifikasi atau thistidak akan muncul lebih dari sekali dalam tangkapan lambda.
Sehingga Anda dapat menggunakan [this], [&], [=]atau [&,this]sebagai lambda-introduceruntuk menangkap thispointer dengan nilai.
Namun [&this]dan [=, this]berbentuk buruk. Dalam kasus terakhir, gcc dengan memaafkan memperingatkan hal [=,this]itu explicit by-copy capture of ‘this’ redundant with by-copy capture defaultdaripada kesalahan.
thistidak dapat diubah, itu tidak cukup besar untuk membuat referensi lebih cepat ... dan bagaimanapun , itu tidak benar-benar ada , jadi itu telah tidak ada kehidupan nyata, yang berarti referensi apa pun padanya akan tergantung menurut definisi.thisadalah nilai pr, bukan lvalue.