【发布时间】:2015-04-30 15:59:13
【问题描述】:
#include <iostream>
class Base {
public:
virtual void print() = 0;
};
class Derived : public Base {
public:
void print() {
std::cout << "test\n";
}
};
Base* getBase (Derived* d) {
return (Base*) d;
}
int main()
{
Derived* d;
Base* b = getBase(d);
b->print();
return 0;
}
此代码编译(使用 g++)没有任何问题,但运行后,它崩溃了! 我尝试了不同类型的转换(如 static_cast),但没有任何效果。
有什么问题?
【问题讨论】:
-
虽然不是这里的问题,但不要对 C++ 对象使用 C 风格的强制转换 - 在某些极端情况下它们不起作用并且只会给出错误的结果。请改用 static_cast。
标签: c++ pointers casting crash virtual