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

  • ASUS

    ASUS

    22 EKİM 2005
  • Autocar

    Autocar

    11 Mart 2006
  • THELIFEOFPRICE

    THELIFEOFPRI

    16 Mart 2011