是否试图修改一个 const_cast-ed,但动态分配的常量对象仍然是未定义的行为?

Is an attempt to modify a const_cast-ed, but dynamically allocated constant object still undefined behavior?

例如:

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

*p = 4; // undefined behavior?

特别是,编译器能否优化掉 分配的 *pc

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

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

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

const_castconst 到非 const 只有当原始指针是非 const.

时才是安全的

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

如果你写了

const int* pc = new int(3);

那么你可以摆脱pcconst-ness。