SORU
30 Mayıs 2011, PAZARTESİ


Lambda c 11 değişkenleri yakalamak onlar't kullanma?

[=] Tüm yerel değişkenler bir lambda değeri tarafından yakalandı olmak istiyorum belirtmek için kullanıyorum, bu neden olurtümişlevi kopyalanan yerel değişkenler, ya da sadece tüm yerel değişkenlerbu lambda tarafından kullanılır?

Bu yüzden, örneğin, eğer:

vector<int> my_huge_vector(100000);
int my_measly_int;
some_function([=](int i){ return my_measly_int   i; });

My_huge_vector lambda onu kullanmıyorum bile kopyalanır?

CEVAP
30 Mayıs 2011, PAZARTESİ


Her değişken açıkça yakalama listesinde adı yakalanır. Varsayılan yakalama sadece (a) değil açıkça yakalama listesinde adı ve (b) de değişkenler ele geçirecekkullanılırlambda ifade gövdesi. Bir değişken açıkça adlandırılmış ve lambda ifadesi içinde değişken kullanmak istemiyorsanız, o zaman değişken yakalanır. , my_huge_vector örnek yakalanır.

Başına C 11 §5.1.2[ifade.prim.lambda] 11/:

Bir eğerlambda ifadebir ilişkili vardıryakalama-varsayılanve onunbileşik deyimDDR-kullanırthis veya otomatik depolama süresi ile bir değişken veDDR-kullanılırvarlık açıkça yakalanan, daha sonra değilDDR-kullanılırvarlık örtülü olarak çekilecek dedi.

Lambda ifade etti ilişkili yakalama varsayılan: varsayılan değer [=] kullanarak değişkenleri yakalamak.

Eğer bir değişken kullanılıyorsa, (terimin Bir Tanımı Kural anlamında"") kullanılan bir değişken örtülü olarak yakalanır. my_huge_vector tüm vücutta kullanmayın beri ("") bileşik deyim lambda ifade, örtülü olarak yakalanan değildir.

§5.1.2/14 ile devam edin

Bir varlığın kopyasını tarafından yakalanır

  • örtülü olarak alınmışyakalama-varsayılan= ya olursa
  • açıkça & içermeyen bir yakalama ile yakalandı.

my_huge_vector örtülü olarak yakalanır ve açıkça yakalanan olmadığından, başvuru kopyalama veya esir değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • B4ROK

    B4ROK

    1 EKİM 2008
  • curioustravelers

    curioustrave

    12 AĞUSTOS 2006