SORU
25 Mart 2013, PAZARTESİ


Mu [=] tüm yerel değişkenler kopyalanacak ima ediyorsunuz?

Ne zaman yazdığım bir lambda [=], demek ki benim tüm yerel değişkenler olacak kopyalanan içine üyelerinin oluşturulan yapı ya herhalde sadece o olacak aslında kullanılan lambda? Örneğin:

void f()
{
    vector<int> v(10000);
    const int n = 5;
    const int DivByNCnt = count_if(istream_iterator<int>(cin), istream_iterator<int>(), 
          [=](int i)
          {
             return i % n == 0;
          });
}

Eğer varsa, aşağıdaki, doğru mu?

  • hem n ve v kopyalanacaktır
  • n, v olmaz kopyalanacaktır
  • n, Mayıs v kopyalanır veya optimizasyon ayarları/implmenentation bağlı olarak kopyalanamaz.

Vektör kopya yapıcı yan etkileri vardır bu tartışmanın hatırına sanırım.

CEVAP
25 Mart 2013, PAZARTESİ


Hayır. Sadece ortam kapsamında tüm yerel değişkenler lambda gövdesi içinde arama için kullanılabilir olduğu anlamına gelir. Sadeceeğerdeğişken çekilecek bir ortam değişkeni yerel bir iradenin adı sevk ve değeri tarafından yakalanan olacak.

"Hiçbir şey" = & sadece sözdizimsel şeker, aslında, derleyici söyler GZ "ne demek istediğimi anlamak". yakalama


5.1.2/11-12, resmi başvuru:

Lambda ifade bir varsa bir ilişkiliyakalama-varsayılanve onunbileşik deyimDDR-kullanır [...] otomatik depolama süresi) ve kullanılan varlık ile bir değişken açıkça ele değil, o) kullanılan varlık olduğu söyleniyorörtülü olarak yakalandı[...]

Bir varlıktırele geçirdieğer açıkça veya örtülü olarak yakalanmış olması.

Unutmayın "yakalama-varsayılan" [=] [&] anlamına gelir. Tekrar, yakalama-varsayılan bir belirtme, bir şey yakalamak değil, sadece) kullanarak bir değişken yok.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Brandon McCrary

    Brandon McCr

    15 Ocak 2012
  • KoreanFrogMania님의 채널

    KoreanFrogMa

    18 Aralık 2011
  • multimediaGEEKS LLC

    multimediaGE

    3 Mayıs 2010