[英]C++ dynamic binding problem
问题是:
a)以下代码是否合法? (考虑到它在运行时崩溃)
b)如果在编译时有gcc或MVC的任何编译器标志要显示,则以下代码中可能存在问题?
#include <iostream>
using namespace std;
class A
{
public:
void write(){ cout<<"A"; }
};
class B
{
public:
virtual void write(){ cout<<"B"; }
};
int main()
{
A *pa=(A*) new B();
pa->write();
B *pb=(B*) new A() ;
pb->write();
delete pa;
delete pb;
return 0;
}
谢谢!
不,这是不合法的。 B
不是从A
派生A
,反之亦然。 强制这样的转换会导致不确定的行为。 您告诉编译器“关闭,我知道我在做什么”,这会导致各种麻烦。 这是避免使用旧的C样式强制转换,而改用C ++样式强制转换的原因之一( static_cast
等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.