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

  • isupportthegosselins

    isupporttheg

    6 Aralık 2009
  • Makeup Lover

    Makeup Lover

    12 HAZİRAN 2011
  • The White House

    The White Ho

    21 Ocak 2006