SORU
31 Mart 2011, PERŞEMBE


Neden C-yakalama-değeri 0 x'in lambda gerektirir "kesilebilir" sözcüğü, varsayılan olarak mı geliyor?

Kısa örnek:

#include <iostream>

int main()
{
    int n;
    [&](){n = 10;}();             // OK
    [=]() mutable {n = 20;}();    // OK
    // [=](){n = 10;}();          // Error: a by-value capture cannot be modified in a non-mutable lambda
    std::cout << n << "\n";       // "10"
}

Soru şu: Neden mutable anahtar sözcük ihtiyacımız var mı? Geleneksel parametre fonksiyonlar adında geçen oldukça farklı. Arkasındaki mantık nedir?

Ben izlenim altında olduğunu bütün mesele yakalama-by-value için izin kullanıcı değiştirmek için geçici. aksi takdirde ben hemen hemen her zaman daha iyi kullanarak yakalama referans, değil mi?

Herhangi bir enlightenments?

(Bu arada MSVC2010 kullanıyorum. Bu standart olması) gerekir AFAIK

CEVAP
31 Mart 2011, PERŞEMBE


Varsayılan olarak, fonksiyon bir nesne her zaman deniyor aynı sonucu verir çünkü mutable gerektirir. Bu nesne odaklı bir fonksiyon ve bir fonksiyonun global bir değişken kullanarak arasındaki fark, etkili bir şekilde.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • booba1234

    booba1234

    22 Temmuz 2006
  • cdgotx

    cdgotx

    8 Kasım 2011
  • jeffisthecoolguy

    jeffisthecoo

    17 HAZİRAN 2013