【发布时间】:2021-01-29 01:28:21
【问题描述】:
class myclass1 {
public:
virtual ~myclass1() {
}
};
class myclass2 : public myclass1 {
};
int main() {
myclass1 obj1;
myclass2 obj2;
myclass1 *p1 = &obj2;
myclass2 *p2 = static_cast<myclass2 *>(&obj1);
if( p1 && p2){
cout << typeid(p1).name() << endl;
cout << typeid(p2).name() << endl;
}
}
输出如下:
P8myclass1
P8myclass2
Process finished with exit code 0
代码有两个类,我尝试使用两种类型的指针来指向另一种类型。从基类到它的子类是完全可以的,而反之则不行(“myclass2 *p2 = static_cast
当我在 Clion 中处于调试模式时,调试器似乎知道指针的真实类型,如图所示。它知道 p1 的类型是“myclass2”,而 p2 的类型是“myclass1”。它有什么魔力?
obj1 = {myclass1}
obj2 = {myclass2}
p1 = {myclass2 * | 0x7ffeec114a08} 0x00007ffeec114a08
p2 = {myclass1 * | 0x7ffeec114a10} 0x00007ffeec114a10
【问题讨论】: