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

  • dcigs

    dcigs

    9 EYLÜL 2006
  • theKGB65

    theKGB65

    24 Aralık 2007
  • WHZGUD2

    WHZGUD2

    21 EYLÜL 2011