gpt4 book ai didi

c++ - 将对象(而不是指针)向下转换为它们已知的派生类型是否安全?

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

会不会有切片的危险

result Compare(const Osp::Base::Object &obj1, const Osp::Base::Object &obj2, int &cmp) const {
cmp = ((const Block)obj1).NumSuperBlocks() - ((const Block)obj2).NumSuperBlocks();
}

在哪里

class Block : Object {/*Filler*/}

obj1obj2一定是Block对象吗?

我很想使用:

    cmp = ((const Block*)&obj1)->NumSuperBlocks() - ((const Block*)&obj2)->NumSuperBlocks();

但是在阅读 SO 对对象切片标记的简要描述后,我很想使用前者。但我真的不想要任何讨厌的无声切片。

最佳答案

引用和指针都是多态的。

你可能更喜欢

static_cast<const Block&>(obj1).NumSuperBlocks()

对于从引用开始的向下转型,它等同于*static_cast<const Block*>(&obj1) .

关于c++ - 将对象(而不是指针)向下转换为它们已知的派生类型是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9282973/

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