- 论坛徽章:
- 0
|
如题,我对dynamic_cast转换"引用类型"的一个理解是:
只要dynamic_cast输入的参数是一个内容正确的左值,哪怕它是其他类型的指针或者引用转型过来的,只要它本身内容正确(指向了正确的虚函数表),RTTI就能成功。
可以这样理解么?
-------------------------------------------------
#include <cstdlib>
#include <cstdio>
#include <typeinfo>
using namespace std;
class A{};
class C{
public:
virtual void g(){}
};
class D:public C{};
int main(int argc, char *argv[])
{
D d ;
A *a=(A*)&d;
C* pa=(C*)a;
C& pc=*pa;
try{
C& pc2=dynamic_cast<C&>(pc);
D& pd=dynamic_cast<D&>(pc);
}catch(bad_cast){
printf("bad_cast\n");
}catch(...){
printf("other exception\n");
}
return EXIT_SUCCESS;
}
程序不会抛出任何异常。如果我把"D d"的声明改为"C d"的声明,"D& pd=dynamic_cast<D&>(pc)"就会抛出std::bad_cast异常 |
|