这是我们团队的小项目(acdemic)中的一段代码
class B{
public:
DWORD GetLen(){return i;}
DWORD i ;
};
class A
{
public:
DWORD GetLen(){return j;}
public:
int j ;
};
B b;
b.i = 2;
A * pA = (A *)&b;
int j = pA->GetLen();
“j”将为2。 这段代码安全吗?或者,我应该修改它?通过使用reinterpret_cast或static_cast?或其他想法?
答案 0 :(得分:4)
此代码不安全。在C ++中使用强制转换运算符,例如:dynamic_cast
,reinterpret_cast
等
在这种情况下,不允许进行强制转换,而且你对编译器撒谎。
它只能起作用,因为这些类基本相同。
答案 1 :(得分:4)
这段代码安全吗?
没有。
我应该怎么做才能纠正它?
移除强制转型,仅在A
的实例上调用A
的成员函数。
至于你应该做什么,那么,这完全取决于你实际上要做的事情。