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

  • Bigapplemagic

    Bigapplemagi

    22 EYLÜL 2011
  • Attempts at least

    Attempts at

    1 Ocak 2007
  • Rockstar Games

    Rockstar Gam

    17 ŞUBAT 2006