Olası Mükerrer: Bir C++ yöntem bildirimindeki son “const” ifadesinin anlamı?
Elimde bir kitap var, içinde şöyle bir şey yazıyor:
class Foo
{
public:
int Bar(int random_arg) const
{
// code
}
};
Bu ne anlama geliyor?
Bir fonksiyon bildiriminden sonra const
anahtar sözcüğü ile gösterilen bir "const fonksiyonu", bu sınıf fonksiyonunun sınıfın bir üye değişkenini değiştirmesini bir derleyici hatası haline getirir. Bununla birlikte, bir sınıf değişkeninin fonksiyon içinde okunmasında sorun yoktur, ancak bu fonksiyon içinde yazılması bir derleyici hatası oluşturur.
Bu tür "const fonksiyon" hakkında düşünmenin bir başka yolu, bir sınıf fonksiyonunu örtük bir this
işaretçisi alan normal bir fonksiyon olarak görmektir. Yani int Foo::Bar(int random_arg)
yöntemi (sonunda const olmadan) int Foo_Bar(Foo* this, int random_arg)
gibi bir işlevle sonuçlanır ve Foo f; f.Bar(4)
gibi bir çağrı dahili olarak Foo f; Foo_Bar(&f, 4)
gibi bir şeye karşılık gelecektir. Şimdi sonuna const ekleyerek (int Foo::Bar(int random_arg) const
) const this işaretçisi ile bir bildirim olarak anlaşılabilir: int Foo_Bar(const Foo* this, int random_arg)
. Bu durumda this
türü const olduğundan, üye değişkenlerde herhangi bir değişiklik yapılması mümkün değildir.
Fonksiyonun bir sınıfın herhangi bir değişkenine yazmasına izin vermeme "const fonksiyon" kısıtlamasını gevşetmek mümkündür. Fonksiyon "const fonksiyon" olarak işaretlendiğinde bile bazı değişkenlerin yazılabilir olmasına izin vermek için, bu sınıf değişkenleri mutable
anahtar sözcüğü ile işaretlenir. Böylece, bir sınıf değişkeni değiştirilebilir olarak işaretlenirse ve bir "const fonksiyon" bu değişkene yazarsa, kod temiz bir şekilde derlenir ve değişkenin değiştirilmesi mümkün olur. (C++11)
Her zamanki gibi const
anahtar sözcüğü ile uğraşırken, bir C++ deyiminde const anahtar sözcüğünün yerini değiştirmenin tamamen farklı anlamları vardır. Yukarıdaki const
kullanımı sadece fonksiyon bildiriminin sonuna parantezden sonra const
eklendiğinde geçerlidir.
constC++'da çok fazla kullanılan bir niteleyicidir: sözdizimi ve sıralaması işaretçilerle birlikte genellikle kolay değildir. const
doğruluğu ve const
anahtar sözcüğü hakkında bazı okumalar: