Alasan [&this]
tidak berhasil adalah karena ini adalah kesalahan sintaks. Setiap parameter yang dipisahkan koma di lambda-introducer
is a capture
:
capture:
identifier
& identifier
this
Anda dapat melihat itu &this
tidak diperbolehkan secara sintaksis. Alasan itu tidak diizinkan adalah karena Anda tidak ingin menangkap this
dengan referensi, karena ini adalah penunjuk const kecil. Anda hanya ingin meneruskannya berdasarkan nilai - jadi bahasanya tidak mendukung penangkapan this
dengan referensi.
Untuk menangkap this
secara eksplisit Anda dapat menggunakan [this]
file lambda-introducer
.
Yang pertama capture
bisa jadi capture-default
adalah:
capture-default:
&
=
Ini berarti menangkap secara otomatis apa pun yang saya gunakan, masing-masing dengan referensi ( &
) atau dengan nilai ( =
) - namun perlakuannya this
khusus - 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" this
seperti 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
this
dan setiap pengenal yang dikandungnya harus diawali dengan &
. Pengidentifikasi atau this
tidak akan muncul lebih dari sekali dalam tangkapan lambda.
Sehingga Anda dapat menggunakan [this]
, [&]
, [=]
atau [&,this]
sebagai lambda-introducer
untuk menangkap this
pointer 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 default
daripada kesalahan.
this
tidak 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.this
adalah nilai pr, bukan lvalue.