const_castconstมีความปลอดภัยเท่านั้นถ้าคุณกำลังหล่อตัวแปรที่เป็นไม่ใช่เดิม ตัวอย่างเช่นหากคุณมีฟังก์ชันที่รับพารามิเตอร์ของ a const char *และคุณส่งผ่านค่าที่แก้ไขได้char *ก็ปลอดภัยที่จะให้const_castพารามิเตอร์นั้นกลับไปเป็น a char *และแก้ไข อย่างไรก็ตามหากตัวแปรดั้งเดิมเป็นจริงการconstใช้const_castจะส่งผลให้เกิดพฤติกรรมที่ไม่ได้กำหนด
void func(const char *param, size_t sz, bool modify)
{
if(modify)
strncpy(const_cast<char *>(param), sz, "new string");
printf("param: %s\n", param);
}
...
char buffer[16];
const char *unmodifiable = "string constant";
func(buffer, sizeof(buffer), true);
func(unmodifiable, strlen(unmodifiable), false);
func(unmodifiable, strlen(unmodifiable), true);
constวัตถุเดิมผ่านการconstอ้างอิง / ตัวชี้ที่ไม่ได้กำหนดไว้ หาก แต่คุณเพียงแค่const_castต้องการหลีกเลี่ยง API spec'd ที่ไม่ดี (หรือในกรณีของฉันคือเกียจคร้าน) ที่ยอมรับเฉพาะการไม่constอ้างอิง แต่จะใช้ในconstวิธีการเท่านั้น ... ไม่มีปัญหาใด ๆ