mutable
Anahtar kelime delmek için bir yoldur const
size nesneleri üzerinde yayılacak peçe. Bir nesneye const referansınız veya işaretçiniz varsa, o nesneyi ne zaman ve nasıl işaretlendiği dışında hiçbir şekilde değiştiremezsiniz mutable
.
Senin ile const
başvuru veya pointer size kısıtlanır:
- yalnızca görünür veri üyeleri için okuma erişimi
- yalnızca olarak işaretlenmiş yöntemleri çağırma izni
const
.
mutable
Şimdi yazabilir veya işaretlenmiş ayarlanan veri üyeleri böylece istisna yapar mutable
. Dışarıdan görünen tek fark bu.
Dahili const
olarak size göre görünen yöntemler işaretli veri üyelerine de yazabilir mutable
. Esasen, yapı perdesi kapsamlı bir şekilde delinmiştir. Konsepti mutable
yok etmediğinden const
ve yalnızca yararlı özel durumlarda kullanıldığından emin olmak tamamen API tasarımcısına bağlıdır . mutable
Anahtar kelime bu özel durumlar tabi bunun nedeni açıkça işaretleri veri üye olur.
Uygulamada const
kod tabanınız boyunca obsesif olarak kullanabilirsiniz (esasen kod tabanınızı const
"hastalık" ile "enfekte etmek istersiniz ). Bu dünyada işaretçiler ve referanslar const
çok az istisna dışında, akıl yürütmesi ve anlaması daha kolay olan kod verir. İlginç bir araştırma için "referans şeffaflığı" konusuna bakın.
mutable
Anahtar kelime olmadan, sonunda const_cast
çeşitli yararlı özel durumları (önbellekleme, ref sayımı, hata ayıklama verileri, vb.) Ne yazık ki API istemcisini kullandığı nesnelerin / nesnelerin korunmasını yok etmeye zorladığı için const_cast
önemli ölçüde daha yıkıcıdır . Ek olarak yaygın yıkıma neden olur : bir sabit işaretçi veya başvuru oluşturmak, görünür üyelere serbest yazma ve yöntem çağırma erişimi sağlar. Bunun aksine , API tasarımcısının istisnalar üzerinde hassas bir kontrol gerçekleştirmesini gerektirir ve genellikle bu istisnalar özel veriler üzerinde çalışan yöntemlerde gizlenir .mutable
const
const
const_cast
mutable
const
const
(Not: Birkaç kez veri ve yöntem görünürlüğüne atıfta bulunuyorum . Burada tartışılan tamamen farklı bir nesne koruma türü olan, kamuya açık veya özel veya korumalı olarak işaretlenmiş üyelerden bahsediyorum .)