Joh*_*ohn 3 c++ downcast object-slicing
会有切片的危险吗?
result Compare(const Osp::Base::Object &obj1, const Osp::Base::Object &obj2, int &cmp) const {
cmp = ((const Block)obj1).NumSuperBlocks() - ((const Block)obj2).NumSuperBlocks();
}
Run Code Online (Sandbox Code Playgroud)
哪里
class Block : Object {/*Filler*/}
Run Code Online (Sandbox Code Playgroud)
并obj1和obj2放心是Block对象?
我很想用:
cmp = ((const Block*)&obj1)->NumSuperBlocks() - ((const Block*)&obj2)->NumSuperBlocks();
Run Code Online (Sandbox Code Playgroud)
但在阅读SO的对象切片标签的简要描述时,我很想使用前者.但我真的不想要任何讨厌的无声切片.
引用和指针都是多态的.
你可能更喜欢
static_cast<const Block&>(obj1).NumSuperBlocks()
Run Code Online (Sandbox Code Playgroud)
对于从引用开始的向下转换,它相当于*static_cast<const Block*>(&obj1).