gra*_*asm 1 c++ model-view-controller g++
问题是:
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;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
不,这不合法. B不是来自A,反之亦然.强制执行这样的强制转换会导致未定义的行为.你告诉编译器"闭嘴,我知道我在做什么",这会导致各种各样的麻烦.这是避免旧C风格转换的一个原因,而是使用C++风格的转换(static_cast等等).