gpt4 book ai didi

c++ - 通过 const 指针修改用 new 创建的对象是否合法?

转载 作者:IT老高 更新时间:2023-10-28 22:25:16 26 4
gpt4 key购买 nike

所以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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com