例如:
const int* pc = new const int(3); // note the const
int* p = const_cast<int*>(pc);
*p = 4; // undefined behavior?
特别是,编译器是否可以优化堆 -allocated *pc
?
如果没有,尝试通过*pc
修改p
仍然构成未定义的行为 - 如果是,为什么?
答案 0 :(得分:4)
是的,是的。至于为什么 - 因为你正在修改const
对象。
关于const
之后new
的好点 - 没有它,代码将是合法的。
答案 1 :(得分:3)
const_cast
到非const
的{p> const
仅在原始指针为非const
时才安全。
如果原始指针是const
(如示例中的情况),则行为未定义。
如果你写过
const int* pc = new int(3);
然后你可以抛弃const
的{{1}} -