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

  • hidetake takayama

    hidetake tak

    3 Mart 2009
  • Jay Will

    Jay Will

    19 NİSAN 2006
  • Marques Brownlee

    Marques Brow

    21 Mart 2008