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

  • EmbarkToHeaven

    EmbarkToHeav

    3 EYLÜL 2007
  • Hak5DarrensVlog

    Hak5DarrensV

    11 EYLÜL 2009
  • Mark Hyder

    Mark Hyder

    6 EKİM 2011