当函数引用对象(并访问非 const 方法)时,如何摆脱 const 性?

2023-11-27

我有一份想要保护的数据的备份副本,所以我制作了它const。我需要违反这一点const两次,一次将原始数据存储到其中:

fgBlocks.CopyInto((BlkArray&)backUpCopy);

w.r.t.

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

当我再次打电话时RemoveAll()这是一个非常量方法:

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

是第一个演员(如上所示,(BlkArray&)) 正确的?这是我之前从未涉及过的间接方面。然后我会再次添加另一个未使用的方面,即抛弃const调用对象方法的能力,编译器不接受,如上所示。

成员声明如下:

BlkArray fgBlocks;
const BlkArray backUpCopy;

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

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

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

未初始化的成员“MyClass::backUpCopy”,带有“const”类型“const BlockArray”


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

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

另一个也同样如此:

const_cast<BlkArray&>(backUpCopy).RemoveAll(true);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当函数引用对象(并访问非 const 方法)时,如何摆脱 const 性? 的相关文章

随机推荐