And*_*rei 6 c++ reinterpret-cast
这是我的测试示例:
struct base {
virtual ~base(){}
int x;
};
struct derived: public virtual base {
base * clone() {
return new derived;
}
derived(): s("a") {}
std::string s;
};
int main () {
derived d;
base * b = d.clone();
derived * t = reinterpret_cast<derived*>(b);
std::cout << t->s << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它在我打印s的行崩溃.由于"b"是指向派生类的指针,因此reinterpret_cast应该可以正常工作.我想知道为什么它会崩溃.同时,如果我用dynamic_cast替换reinterpret_cast,那么它可以工作.
Die*_*lla 12
即使b是在这里动态类型的derived,你必须使用dynamic_cast.这是 dynamic_cast为了在运行时将基类的指针动态转换为派生类.
reinterpret_cast获取原始指针并将其视为派生类型.但是,由于virtual继承,必须对指针进行微调,以指向正确的方法调度表,这正是dynamic_cast将要执行的操作.
| 归档时间: |
|
| 查看次数: |
5713 次 |
| 最近记录: |