gpt4 book ai didi

c++ - 当函数引用对象(并访问非 const 方法)时,您如何抛弃 const'ness?

转载 作者:太空狗 更新时间:2023-10-29 20:16:28 25 4
gpt4 key购买 nike

我有一个数据备份拷贝,我想保护它,所以我将它设为 const。我需要在两次情况下违反 constness,一次是将原始数据存储到其中:

fgBlocks.CopyInto((BlkArray&)backUpCopy);

w.r.t.

result CopyInto(BlkArray &replica) const {/**/}

当我再次调用 RemoveAll() 时,这是一个非常量方法:

((BlkArray)backUpCopy).RemoveAll(true);

第一个转换(如上所示,(BlkArray&))是否正确?这是我之前没有使用过的间接的一个方面。然后,我将再次添加另一个未使用的方面,即放弃用于调用对象方法的 constness,如上所示,编译器不接受它。

成员声明如下:

BlkArray fgBlocks;
const BlkArray backUpCopy;

我正在尝试扩展 Correa 的解决方案,因此:

    BlkArray *pBUCopy = (BlkArray *)&backUpCopy;
fgBlocks.CopyInto(*pBUCopy);

现在唯一的问题是编译器由于以下原因而失败

uninitialized member 'MyClass::backUpCopy' with 'const' type 'const BlockArray'

最佳答案

请注意,如果您这样做并且对象确实是const,那么在丢弃const之后修改它是未定义的行为。

fgBlocks.CopyInto(const_cast<BlkArray&>(backUpCopy));

另一个也是一样:

const_cast<BlkArray&>(backUpCopy).RemoveAll(true);

关于c++ - 当函数引用对象(并访问非 const 方法)时,您如何抛弃 const'ness?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9474741/

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