SORU
19 EYLÜL 2008, Cuma


'değişken' anahtar kelime herhangi bir amaç değişken sabit bir fonksiyon tarafından değiştirilmesi için izin dışında var mı?

Bir süre önce mutable anahtar sözcüğüyle bir sınıf üye değişkeni işaretli bazı kod rastladım. Sadece const bir yöntem içinde bir değişkeni değiştirmek için izin verir görebildiğim kadarıyla:

class Foo  
{  
private:  
    mutable bool done_;  
public:  
    void doSomething() const { ...; done_ = true; }  
};

Bu anahtar kelime sadece kullanımı veya gözle görülenden daha fazlası var mı? Beri kullanılan Bu teknikte bir sınıf, bir işaretleme boost::mutex olarak kesilebilir izin const fonksiyonları için kilit dişli-güvenlik nedeniyle, ama, dürüst olmak gerekirse, ben de öyle hissediyorum biraz kesmek.

CEVAP
19 EYLÜL 2008, Cuma


Bit sabit ve mantıksal sabit farklılaşmayı sağlar. Mantıklı inş ortak arabirim, kilitleme örnekte olduğu gibi görünür bir nesne bir şekilde değiştirmez. Başka bir örnek, bir değer istendiğinde ilk kez hesaplar, ve sonucu önbelleğe sınıf olacaktır.

Beri c 11 mutable şeylerin değeri tarafından yakalanan değiştirilebilir olduğunu göstermek için bir lambda kullanılabilir (varsayılan değil):

int x = 0;
auto f1 = [=]() mutable {x = 42;};  // OK
auto f2 = [=]()         {x = 42;};  // Error: a by-value capture cannot be modified in a non-mutable lambda

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BASS212M

    BASS212M

    15 Temmuz 2009
  • Cartoonium

    Cartoonium

    11 NİSAN 2011
  • ethr95awd

    ethr95awd

    8 Kasım 2006