mutableคำหลักเป็นวิธีที่จะแทงที่constม่านผ้าม่านคุณมากกว่าวัตถุของคุณ หากคุณมีการอ้างอิง const หรือชี้ไปยังวัตถุที่คุณไม่สามารถแก้ไขวัตถุนั้นในทางใด ๆยกเว้นmutableเมื่อใดและวิธีการที่จะมีการทำเครื่องหมาย
ด้วยconstการอ้างอิงหรือตัวชี้ของคุณคุณจะถูก จำกัด :
- เข้าถึงการอ่านสำหรับสมาชิกข้อมูลที่มองเห็นได้เท่านั้น
constสิทธิ์ในการเรียกวิธีการเดียวที่จะทำเครื่องหมายเป็น
ยกเว้นทำให้มันดังนั้นตอนนี้คุณสามารถเขียนหรือชุดข้อมูลสมาชิกที่ถูกทำเครื่องหมายmutable mutableนั่นคือความแตกต่างที่มองเห็นจากภายนอกเท่านั้น
ภายในเหล่านั้นวิธีการที่จะเห็นคุณยังสามารถเขียนข้อมูลสมาชิกที่ถูกทำเครื่องหมายconst mutableโดยพื้นฐานแล้วม่าน const จะถูกเจาะอย่างละเอียด มันขึ้นอยู่กับผู้ออกแบบ API อย่างสมบูรณ์เพื่อให้แน่ใจว่าmutableจะไม่ทำลายconstแนวคิดและใช้ในกรณีพิเศษที่มีประโยชน์เท่านั้น mutableคำหลักที่จะช่วยเพราะมันได้อย่างชัดเจนข้อมูลสมาชิกเครื่องหมายที่อยู่ภายใต้กรณีพิเศษเหล่านี้
ในทางปฏิบัติคุณสามารถใช้constอย่างย่ำแย่ตลอด codebase ของคุณ (โดยพื้นฐานแล้วคุณต้องการ "ติดเชื้อ" codebase ของคุณด้วยconst"โรค") ในโลกนี้พอยน์เตอร์และการอ้างอิงมีconstข้อยกเว้นน้อยมากการให้โค้ดที่ง่ายต่อการให้เหตุผลและเข้าใจ สำหรับการพูดนอกเรื่องที่น่าสนใจค้นหา "ความโปร่งใสอ้างอิง"
ในที่สุดหากไม่มีmutableคำหลักคุณจะถูกบังคับให้ใช้const_castเพื่อจัดการกับกรณีพิเศษต่าง ๆ ที่มีประโยชน์ซึ่งอนุญาต (การแคชการอ้างอิงการนับการดีบักข้อมูล ฯลฯ ) น่าเสียดายconst_castยิ่งกว่าการทำลายmutableเพราะมันบังคับให้ลูกค้า API ทำลายการconstป้องกันของวัตถุที่เขาใช้ นอกจากนี้ยังทำให้เกิดการconstทำลายอย่างกว้างขวาง: const_castการใช้ตัวชี้ const หรือการอ้างอิงช่วยให้การเขียนและวิธีการเข้าถึงสมาชิกที่มองเห็นได้อย่างอิสระ ในทางตรงกันข้ามmutableผู้ออกแบบ API ต้องใช้การควบคุมที่ละเอียดยิ่งกว่าconstข้อยกเว้นและโดยปกติแล้วข้อยกเว้นเหล่านี้จะถูกซ่อนอยู่ในconstวิธีการดำเนินการกับข้อมูลส่วนตัว
(NB ฉันอ้างถึงการมองเห็นข้อมูลและวิธีการสองสามครั้งฉันกำลังพูดถึงสมาชิกที่ทำเครื่องหมายเป็นสาธารณะเทียบกับส่วนตัวหรือได้รับการป้องกันซึ่งเป็นการป้องกันวัตถุชนิดต่าง ๆ ที่กล่าวถึงที่นี่ )