ตามมาตรฐาน C ++ (9.2.3.2 สมาชิกข้อมูลคงที่)
1 สมาชิกข้อมูลคงที่ไม่ได้เป็นส่วนหนึ่งของวัตถุย่อยของคลาส ...
และ (9.2.2.1 ตัวชี้นี้)
1 ในเนื้อความของฟังก์ชันสมาชิกที่ไม่คงที่ (9.2.1) คีย์เวิร์ดนี้คือนิพจน์ prvalue ที่มีค่าเป็นแอดเดรสของอ็อบเจ็กต์ที่ฟังก์ชันถูกเรียกใช้ ประเภทนี้ในฟังก์ชันสมาชิกของคลาส X คือ X *หากประกาศฟังก์ชันสมาชิก const ประเภทนี้คือ const X * , ...
และในที่สุด (9.2.2 ฟังก์ชันสมาชิกไม่คงที่)
3 ... ถ้าการค้นหาชื่อ (3.4) แก้ไขชื่อในนิพจน์ id เป็นสมาชิกที่ไม่ใช่ประเภทที่ไม่คงที่ของคลาส C บางตัวและถ้านิพจน์ id อาจได้รับการประเมินหรือ C เป็น X หรือคลาสฐาน ของ X นิพจน์ id จะถูกแปลงเป็นนิพจน์การเข้าถึงสมาชิกคลาส (5.2.5) โดยใช้(* this) (9.2.2.1) เป็นนิพจน์ postfix ทางด้านซ้ายของ. ตัวดำเนินการ
ดังนั้นในนิยามคลาสนี้
class A
{
public:
static int a;
void set() const
{
a = 10;
}
};
สมาชิกข้อมูลคงที่ a
ไม่ใช่วัตถุย่อยของอ็อบเจ็กต์ประเภทคลาสและthis
ไม่ใช้ตัวชี้เพื่อเข้าถึงสมาชิกข้อมูลแบบคงที่ ดังนั้นฟังก์ชันสมาชิกใด ๆ ค่าคงที่ไม่คงที่หรือไม่คงที่หรือฟังก์ชันสมาชิกคงที่สามารถเปลี่ยนสมาชิกข้อมูลได้เนื่องจากไม่ใช่ค่าคงที่
ในนิยามคลาสนี้
class A
{
public:
int a;
void set() const
{
a = 10;
}
};
สมาชิกข้อมูลที่ไม่คงที่a
เป็นวัตถุย่อยของวัตถุประเภทคลาส ในการเข้าถึงมันในฟังก์ชันสมาชิกมีการใช้ไวยากรณ์การเข้าถึงสมาชิกของไวยากรณ์นี้โดยนัย คุณไม่สามารถใช้ตัวชี้ค่าคงที่this
เพื่อแก้ไขสมาชิกข้อมูล และตัวชี้นี้ย่อมมีประเภทconst A *
ที่อยู่ในการทำงานเพราะฟังก์ชั่นที่มีการประกาศด้วยรอบคัดเลือกset
const
หากฟังก์ชันไม่มีคุณสมบัติในกรณีนี้สมาชิกข้อมูลสามารถเปลี่ยนแปลงได้