我有一个基类,如下所示:
class point //concrete class
{
... //implementation
}
class subpoint : public point //concrete class
{
... //implementation
}
我如何从一个点对象转换为子点对象?我已经尝试了以下三种方法:
point a;
subpoint* b = dynamic_cast<subpoint*>(&a);
subpoint* b = (subpoint*)a;
subpoint b = (subpoint)a;
这些转换有何问题?
static_cast
也可能导致非对齐对象。我在32位ARM上遇到了这个问题。我将其转换为派生对象,然后调用仅存在于派生对象中的函数。UBsan产生了一堆发现。我不得不切换到dynamic_cast
来解决这些问题。 - jwwvirtual
函数,那么我是否仍然需要担心不对齐的对象,因为我根本无法使用dynamic_cast
? - user1032677