C ++ Standardına göre (9.2.3.2 Statik veri üyeleri)
1 Statik veri üyesi, bir sınıfın alt nesnelerinin parçası değildir ...
Ve (9.2.2.1 Bu işaretçi)
1 Statik olmayan (9.2.1) üye fonksiyonun gövdesinde, bu anahtar kelime, değeri fonksiyonun çağrıldığı nesnenin adresi olan bir prvalue ifadesidir. Bir X sınıfının üye işlevindeki bunun türü X * 'dir. Üye işlevi sabit olarak bildirilmişse, bunun türü const X * , ...
Ve sonunda (9.2.2 Statik olmayan üye fonksiyonları)
3 ... ad araması (3.4), id ifadesindeki adı bazı C sınıfının statik olmayan türden olmayan bir üyesine çözümlerse ve id ifadesi potansiyel olarak değerlendirilirse veya C X veya bir temel sınıfsa X'de, id ifadesi (* this) kullanılarak bir sınıf üyesi erişim ifadesine (5.2.5) dönüştürülür. solundaki sonek ifadesi olarak (9.2.2.1) . Şebeke.
Böylece bu sınıf tanımında
class A
{
public:
static int a;
void set() const
{
a = 10;
}
};
statik veri üyesi a
, sınıf türündeki bir nesnenin alt nesnesi this
değildir ve işaretçi , statik veri üyesine erişmek için kullanılmaz. Dolayısıyla herhangi bir üye fonksiyon, statik olmayan sabit veya sabit olmayan veya statik bir üye fonksiyon, sabit olmadığı için veri üyesini değiştirebilir.
Bu sınıf tanımında
class A
{
public:
int a;
void set() const
{
a = 10;
}
};
statik olmayan veri üyesi a
, sınıf türündeki bir nesnenin bir alt nesnesidir. Bir üye işlevinde ona erişmek için ya bu sözdiziminin bir üye erişim sözdizimi kullanılır. this
Veri üyesini değiştirmek için sabit bir işaretçi kullanamazsınız . Ve bu işaretçi aslında const A *
işlevin içinde bir türe sahiptir, set
çünkü işlev niteleyici ile bildirilmiştir const
. Bu durumda işlevin niteleyicisi yoksa, veri üyesi değiştirilebilir.