const-correctness — C++'ta değişkenlerin, işaretçilerin, referansların ve metodların "sadece okunabilir" olarak işaretlenmesini tanımlayan bir kavramdır. Bu, kodun güvenliğini artırır, sınıf arayüzlerini daha anlaşılır hale getirir ve derleyicinin hataları derleme aşamasında yakalamasını sağlar, çalışma zamanında değil.
const niteliklerinin kullanımı önemlidir çünkü:
Örnek:
class MyArray { public: int getItem(size_t idx) const { // Nesneyi değiştirmez return arr[idx]; } void setItem(size_t idx, int value) { arr[idx] = value; } private: int arr[10]; };
Burada getItem metodu nesneyi değiştirmediğini garanti eder.
Aşağıdakilerin farkı nedir?
void foo(const int* ptr);ile
void foo(int* const ptr);?
Doğru yanıt:
const int* ptr — sabit bir değere işaret eden işaretçi, değeri değiştirmek yok, işaretçiyi değiştirebilirsiniz.int* const ptr — değiştirilebilir bir değere sabit işaretçi, işaretçiyi değiştiremezsiniz, değeri değiştirebilirsiniz.Hikaye
Büyük bir projede bir sınıf metodunu const niteliksiz olarak yazılmıştır:int MyClass::getVal();Bu nedenle sınıf nesnesini const referans olarak kullanmak mümkün olmamıştır, örneğin, sadece "sadece okuma" nesneleri ile çalışan fonksiyonlarda. Bu, kodun yeniden kullanımını sınırlamış ve nesnelerin gereksiz yere kopyalanmasına neden olmuştur.
Hikaye
Geliştirici, yanlışlıkla iç veriye yönelik bir referans döndürdü:int& MyClass::getInt();Sonuç olarak, istemci kodu sınıfın özel alanını değiştirme olanağına sahip oldu ki bu da beklenmedik durum değişikliklerine ve zor tespit edilen hatalara yol açtı.
Hikaye
Bir fonksiyonda sabit parametreyi const olmadan bırakma:void printVector(std::vector<int>& v);Birisi, hata ayıklama için işlev içinde vektörü yanlışlıkla değiştirdi, bu kodu kaldırmayı unutarak. Bu, testlerde neredeyse fark edilmeyen bir yan etki yarattı ve yalnızca üretimde ortaya çıktı.