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

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • Dive In

    Dive In

    17 Temmuz 2013
  • Rooster Teeth

    Rooster Teet

    11 Temmuz 2006