ในการเริ่มต้นคุณอาจรู้ว่าconst
สามารถใช้สร้างข้อมูลของวัตถุหรือตัวชี้ที่ไม่สามารถแก้ไขได้หรือทั้งสองอย่าง
const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer
อย่างไรก็ตามคุณยังสามารถใช้ไวยากรณ์:
Object const *obj; // same as const Object* obj;
สิ่งเดียวที่ดูเหมือนจะสำคัญคือด้านใดของดอกจันที่คุณใส่const
คำหลัก โดยส่วนตัวแล้วฉันชอบที่จะใส่const
ทางด้านซ้ายของประเภทเพื่อระบุว่ามันเป็นข้อมูลที่ไม่สามารถแก้ไขได้เพราะฉันคิดว่ามันอ่านได้ดีกว่าในความคิดจากซ้ายไปขวา แต่ไวยากรณ์ใดมาก่อน
ที่สำคัญกว่านั้นคือทำไมมีวิธีการระบุconst
ข้อมูลที่ถูกต้องสองวิธีและในสถานการณ์ใดที่คุณต้องการหรือต้องการอีกวิธีหนึ่งหากมี
แก้ไข:
ดังนั้นดูเหมือนว่านี่เป็นการตัดสินใจตามอำเภอใจเมื่อมาตรฐานสำหรับวิธีที่คอมไพเลอร์ควรตีความสิ่งต่าง ๆ ที่ร่างขึ้นมานานก่อนที่ฉันจะเกิด เนื่องจากconst
ถูกนำไปใช้กับสิ่งที่อยู่ทางซ้ายของคำหลัก (โดยค่าเริ่มต้น) ฉันคิดว่าพวกเขาคิดว่าไม่มีอันตรายใด ๆ ในการเพิ่ม"ทางลัด"เพื่อใช้คำหลักและตัวระบุประเภทในวิธีอื่น ๆ อย่างน้อยก็จนกว่าจะถึงเวลา การแยกวิเคราะห์ * หรือ & ...
นี่เป็นกรณีใน C และถ้าอย่างนั้นฉันจะสมมุติ?
const
หลังจากชนิดเช่น#define MAKE_CONST(T) T const
แทน#define MAKE_CONST(T) const T
เพื่อให้MAKE_CONST(int *)
ถูกต้องจะขยายตัวออกไปแทนint * const
const int *