2013-03-21 9 views
5

bu örnek lambda baktığımızda:C++ 11 lambda'lar ve köşeli parantez

[](int factor)->int{return factor*factor;} 

herkes bir C++ 11 lambda ifadesi önünde köşeli parantez için iyi ne bana açıklayabilir?

+0

oops, gözden kaçırdı. Ama yine de teşekkürler. – anhoppe

+1

Bir kenara göre ve diğer cevaplarda bahsetmediğimizde, [[] 'ayrıca bir lambda ifadesinin burada kolayca ayrıştırılmasını da sağlar: bir lambda ifadesine sahip olabileceğiniz bağlamı hayal edin. Aynı noktadan farklı bir şekilde kullanılması için geçerli olabileceği bir ortam hayal edebiliyor musunuz? – Yakk

+0

hehe haklısınız, sanırım bu pek çok insana (benim gibi) akla gelmeyen bir şey. Ama iyi bir nokta, söyleyebilirim. – anhoppe

cevap

6

Köşeli parantezler, lambda tarafından hangi değişkenlerin "yakalandığını" ve nasıl (değer veya referans ile) olduğunu belirtir.

Yakalama, lambda dışındaki değişkene lambda içinden başvurabileceğiniz anlamına gelir. Eğer değere göre yakalanırsa, lambda oluşturulduğu anda değişkenin değerini elde edersiniz - bir parametreyi bir işleve değere göre iletmeye benzer. Referans olarak yakalanırsa, lambda dışındaki gerçek değişkene bir referansınız olacaktır (ve kapsamda kaldığından emin olmanız gerekir).

Bir sınıfın içinde "bu" mesajını yakalayabileceğinizi ve sonra sınıf yöntemlerinde olduğu gibi sınıf yöntemlerini çağırabileceğinizi unutmayın.

+0

Tamam, soru çoktan cevaplandı, kötüyüm, ama teşekkürler. – anhoppe