Menurut Standar C ++ (9.2.3.2 Anggota data statis)
1 Anggota data statis bukan bagian dari subobjek kelas ...
Dan (9.2.2.1 Penunjuk ini)
1 Dalam tubuh fungsi anggota non-statis (9.2.1), kata kunci this adalah ekspresi prvalue yang nilainya adalah alamat objek yang dipanggil oleh fungsi tersebut. Jenis ini dalam fungsi anggota kelas X adalah X *. Jika fungsi anggota dideklarasikan const, jenisnya adalah const X * , ...
Dan akhirnya (9.2.2 Fungsi anggota non-statis)
3 ... jika pencarian nama (3.4) menyelesaikan nama dalam ekspresi-id menjadi anggota non-tipe non-statis dari beberapa kelas C, dan jika ekspresi-id berpotensi dievaluasi atau C adalah X atau kelas dasar dari X, ekspresi-id diubah menjadi ekspresi akses anggota kelas (5.2.5) menggunakan (* this) (9.2.2.1) sebagai ekspresi-postfix di sebelah kiri. operator.
Demikianlah dalam definisi kelas ini
class A
{
public:
static int a;
void set() const
{
a = 10;
}
};
anggota data statis a
bukan merupakan subobjek dari sebuah objek dari tipe kelas dan penunjukthis
tidak digunakan untuk mengakses anggota data statis. Jadi setiap fungsi anggota, konstanta non-statis atau non-konstan, atau fungsi anggota statis dapat mengubah anggota data karena itu bukan konstanta.
Dalam definisi kelas ini
class A
{
public:
int a;
void set() const
{
a = 10;
}
};
anggota data non-statis a
adalah subobjek dari sebuah objek dari tipe kelas. Untuk mengaksesnya dalam fungsi anggota digunakan baik sintaks akses anggota dari sintaks ini tersirat. Anda tidak boleh menggunakan penunjuk konstan this
untuk mengubah anggota data. Dan pointer ini memang memiliki tipe const A *
di dalam fungsinya set
karena fungsinya dideklarasikan dengan qualifier const
. Jika fungsi tidak memiliki kualifikasi dalam hal ini anggota data dapat diubah.