Nedeni [&this]
çalışmıyor çünkü bir sözdizimi hatası. İçindeki virgülle ayrılmış her parametre lambda-introducer
a capture
:
capture:
identifier
& identifier
this
Buna &this
sözdizimsel olarak izin verilmediğini görebilirsiniz . Buna izin verilmemesinin nedeni this
, küçük bir const işaretçisi olduğundan asla referansla yakalamak istememenizdir . Bunu yalnızca değere göre geçirmek isteyeceksiniz - bu nedenle dil this
, referansla yakalamayı desteklemiyor .
this
Açıkça yakalamak [this]
için lambda-introducer
.
İlki capture
şu olabilir capture-default
:
capture-default:
&
=
Bu, kullandığım her şeyi, referansla ( &
) veya değere ( =
) göre otomatik olarak yakalamak anlamına gelir - ancak bunun işlenmesi this
özeldir - her iki durumda da daha önce verilen nedenlerle değer tarafından yakalanır (varsayılan bir yakalamayla bile &
, bu genellikle anlamına gelir) referansla yakalama).
5.1.2.7/8:
Ad arama (3.4) amaçları için, this
(9.3.2) ' nin tipini ve değerini belirlemek ve statik olmayan sınıf üyelerine atıfta bulunan id-ifadelerini (*this)
(9.3.1) kullanarak sınıf üyesi erişim ifadelerine dönüştürmek , bileşik-ifade [OF THE LAMBDA] lambda ifadesi bağlamında ele alınır.
Bu nedenle, üye adlarını kullanırken (örneğinizde adın kullanımı gibi) lambda, kaplayan üye işlevinin bir parçasıymış gibi davranır x
, bu nedenle, this
bir üye işlevinin yaptığı gibi "örtük kullanımlar" üretecektir .
Bir lambda yakalama bir yakalama varsayılanı içeriyorsa, &
yani lambda yakalamadaki tanımlayıcılardan önce gelmeyecektir &
. Bir lambda yakalama, yakalama varsayılanı içeriyorsa, =
lambda yakalama,
this
ve her bir tanımlayıcıdan önce gelecektir &
. Bir tanımlayıcı veya this
bir lambda yakalamada birden fazla görünmemelidir.
Eğer kullanabilirsiniz Yani [this]
, [&]
,[=]
veya [&,this]
bir şekilde lambda-introducer
yakalamak için this
değerine göre işaretçi.
Ancak [&this]
ve [=, this]
biçimsizler. Geçen vaka gcc içinde forgivingly için uyarıyor [=,this]
o explicit by-copy capture of ‘this’ redundant with by-copy capture default
ziyade hatalar.
this
değiştirilemez, bir referansı daha hızlı yapacak kadar büyük değildir ... ve her neyse , aslında mevcut değildir , bu yüzden vardır gerçek bir ömür yok, yani ona yapılan herhangi bir atıf, tanım gereği sallanıyor olacaktı.this
bir değerdir, bir değer değildir.