提问人:Joel Niemelä 提问时间:7/3/2022 最后编辑:Joel Niemelä 更新时间:7/4/2022 访问量:283
修改 C++20 中非 const 对象的 const 成员 [duplicate]
Modifying const members of non-const object in C++20 [duplicate]
问:
是否可以在 C++20 中修改非常量对象的 const 字段(使用 const_cast)?
是的,我知道它可能不应该被允许,并且有非常相似的问题(移动具有常量成员的类的构造和赋值,将某个类型的变量替换为 const 成员)。但是一些答案和评论似乎表明这在 C++ 20 中是可能的;但我找不到任何明确说明这是允许的。
例如:
从 c++20 开始,您可以修改 const 成员对象。甚至还有一个 constexpr 函数来做到这一点,以及 如果对象具有非平凡的 DTOR。– 道格 4 月 14 日
construct_at
destroy_at
(评论 https://stackoverflow.com/a/68018681/8245776)
以及这个答案(https://stackoverflow.com/a/71805401/8245776),老实说我不太明白,但它似乎在说在 C++20 中是可能的。
那么是否可以在 C++ 20 中做到这一点,还是我误解了这些答案?
编辑:
好的,从提到的问题来看,我认为答案是在 C++20 中可能吗?不过我仍然不确定,所以如果有人能证实这一点,那将不胜感激。
答: 暂无答案
评论
construct_at
construct_at
construct_at
返回指向新对象的指针。该指针将有效。使用旧的指针可能是一个问题,因为编译器可以(相当合理地)假设 const 对象不会更改。你可以(也许)使用 std::launder 来洗掉它,但我不确定它是如何工作的。std::launder