作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
所以this answer让我想到了将 new
的结果分配给指向 const
的指针的场景。 AFAIK,在这种情况下,您没有理由不能合法 const_cast
constness 并实际修改对象:
struct X{int x;};
//....
const X* x = new X;
const_cast<X*>(x)->x = 0; // okay
但后来我想 - 如果你真的想要 new
创建一个 const
对象怎么办。所以我尝试了
struct X{};
//....
const X* x = new const X;
它编译好了!!!
这是 GCC 扩展还是标准行为?我在实践中从未见过这种情况。如果它是标准的,我会尽可能开始使用它。
最佳答案
new
obviously doesn't create a const object (I hope).
如果你要求 new
创建一个 const
对象,你会得到一个 const
对象。
there's no reason you can't legally
const_cast
the constness away and actually modify the object.
有。原因是语言规范明确地将其称为未定义的行为。所以,在某种程度上,你可以,但这几乎没有任何意义。
我不知道您对此有何期望,但如果您认为问题在于是否分配到只读内存中,那远不是重点。那没关系。编译器可以假设这样的对象不能相应地更改和优化,最终会得到意想不到的结果。
关于c++ - 通过 const 指针修改用 new 创建的对象是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22798558/
我是一名优秀的程序员,十分优秀!