dynamic_cast<> 反对随机指针?

dynamic_cast<> against random pointers?

能否dynamic_cast<> 用于针对可能来自某个随机位置的指针。换句话说,一个指针可能指向 int 或者可能指向某个未知结构?

如果是,它如何访问 vtable 未知的东西;不会尝试通过指针访问 vtable 只是指向内存中的某处并可能导致 GPF?

TIA!!

来自 this dynamic_cast reference:

dynamic_cast < new_type > ( expression )

...

expression - lvalue of a complete class type if new_type is a reference, prvalue of a pointer to complete class type if new_type is a pointer.

[强调我的]

complete class 类型 在这里很重要,因为这意味着你不能真正将任何通用指针传递给 dynamic_cast.

expression 的类型也必须与 new_type[相关(即 base-class、child-class 或 sibling-class),否则行为将是未定义的。

如果您将 dynamic_cast 与任何 "random pointer" 一起使用,您将得到 undefined behavior,虽然编译器可能会警告您(尽管并非总是可能),但它仍在尝试做一些导致 UB 的事情是你作为程序员的责任。