是尝试修改const_cast-ed但动态分配的常量对象仍然是未定义的行为吗?

时间:2015-06-10 12:20:28

标签: c++ compiler-optimization heap-memory undefined-behavior const-cast

例如:

const int* pc = new const int(3);     // note the const
      int* p  = const_cast<int*>(pc);

*p = 4; // undefined behavior?

特别是,编译器是否可以优化 -allocated *pc

如果没有,尝试通过*pc修改p仍然构成未定义的行为 - 如果是,为什么?

2 个答案:

答案 0 :(得分:4)

是的,是的。至于为什么 - 因为你正在修改const对象。

关于const之后new的好点 - 没有它,代码将是合法的。

答案 1 :(得分:3)

const_cast到非const的{​​p> const仅在原始指针为非const时才安全。

如果原始指针是const(如示例中的情况),则行为未定义。

如果你写过

const int* pc = new int(3);

然后你可以抛弃const的{​​{1}} -