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

  • 365multimedia

    365multimedi

    26 ŞUBAT 2009
  • David Wills

    David Wills

    31 Aralık 2007
  • Dom Esposito

    Dom Esposito

    26 Mayıs 2011