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 ฉันอ้างถึงการมองเห็นข้อมูลและวิธีการสองสามครั้งฉันกำลังพูดถึงสมาชิกที่ทำเครื่องหมายเป็นสาธารณะเทียบกับส่วนตัวหรือได้รับการป้องกันซึ่งเป็นการป้องกันวัตถุชนิดต่าง ๆ ที่กล่าวถึงที่นี่ )