如果它们的结构相似,那么在两个不相关的类型之间进行投射是否安全?

时间:2011-03-16 04:44:11

标签: c++ casting

这是我们团队的小项目(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?或其他想法?

2 个答案:

答案 0 :(得分:4)

此代码不安全。在C ++中使用强制转换运算符,例如:dynamic_castreinterpret_cast

在这种情况下,不允许进行强制转换,而且你对编译器撒谎。

它只能起作用,因为这些类基本相同。

答案 1 :(得分:4)

  

这段代码安全吗?

没有。

  

我应该怎么做才能纠正它?

移除强制转型,仅在A的实例上调用A的成员函数。

至于你应该做什么,那么,这完全取决于你实际上要做的事情。