const_cast
const
มีความปลอดภัยเท่านั้นถ้าคุณกำลังหล่อตัวแปรที่เป็นไม่ใช่เดิม ตัวอย่างเช่นหากคุณมีฟังก์ชันที่รับพารามิเตอร์ของ 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
วิธีการเท่านั้น ... ไม่มีปัญหาใด ๆ