는포인터가 아닌 객체를 알려진 파생 형식으로 다운 케하는 것이 안전합니까?
class Block : Object {/*Filler*/}
및 obj1
및 obj2
이 Block
객체로 보장하는
result Compare(const Osp::Base::Object &obj1, const Osp::Base::Object &obj2, int &cmp) const {
cmp = ((const Block)obj1).NumSuperBlocks() - ((const Block)obj2).NumSuperBlocks();
}
슬라이스의 원인이 될 것인가?
내가 사용하는 유혹 해요 :
cmp = ((const Block*)&obj1)->NumSuperBlocks() - ((const Block*)&obj2)->NumSuperBlocks();
을하지만 읽기에 SO 전자를 사용하는 나는 유혹하고있어 객체 슬라이스 태그의 간단한 설명입니다. 그러나 나는 정말로 더러운 조용한 조각을 원하지 않는다.
함수 인자가'const' 인'const 블록 '입니다. – Lol4t0
@BenVoigt : 그래서 포인터와 객체는 여기서 슬라이싱의 유사성과 아무런 차이가 없습니까? TBH, 전자는 더 읽기 쉽고 자연스럽지 않습니다. – John
@ 존 : 여기서 포인터와 참조의 차이는 없습니다. 나는 당신의 원래 코드가 마음에 들지 않는다. 그것은 슬라이스 수 있습니다. 또한 액세스 가능한 복사본 생성자가 필요하며 복사본에 대해 작동합니다. 여기에 참조 또는 포인터를 사용하십시오. –