Contoh-contoh yang saya temukan yang menangkap this
dalam lambda menggunakannya secara eksplisit; misalnya:
capturecomplete = [this](){this->calstage1done();};
Tetapi tampaknya juga memungkinkan untuk menggunakannya secara implisit; misalnya:
capturecomplete = [this](){calstage1done();};
Saya menguji ini di g ++, dan dikompilasi.
Apakah ini standar C ++? (dan jika ya, versi yang mana), atau apakah itu suatu bentuk ekstensi?
c++
lambda
this-pointer
plugwash
sumber
sumber
this->
secara eksplisit, yaitu untuk memastikan bahwa nilai yang ditangkap secara eksplisit digunakan secara eksplisit. Catatan yang[](){ calstage1done(); }
tidak sah, karenathis
tidak akan ditangkap; tapi ketika menangkapthis
secara eksplisit, itu mengejutkan bagi tubuh fungsi untuk tampil sekilas tidak benar-benar menggunakan nilai ditangkap:[this](){ calstage1done(); }
.this
dan menggunakannya dalam lambda yang mungkin juga menjadi alasan untuk menggunakannya secara eksplisitJawaban:
Ini adalah standar dan telah seperti ini sejak C ++ 11 ketika lambdas ditambahkan. Menurut cppreference.com :
sumber
Ini sepenuhnya standar dan telah sejak lambdas diperkenalkan di C ++ 11.
Anda tidak perlu menulis di
this->
sana.sumber