使用相同的基础投射到类:

时间:2015-04-04 15:16:12

标签: c++ casting

考虑以下示例:

#include <iostream>

struct A{ void foo(){ std::cout << "foo()" << std::endl; } };

struct D{ void bar(){ std::cout << "bar()" << std::endl; } };

struct B : A, D{ };

struct C : A{ };

B *b = new B();

C *c = reinterpret_cast<C*>(b);

int main(){ c -> foo(); } //prints foo

DEMO

它有效,但我不确定我是否在这里找到某种UB。也许有人可以参考标准?

我提供了这种情况,因为我有两个类(BC),在某些模块中,我只需要使用B的一部分功能({{1}的功能)。但我已经实例化了课程C,我可以像我一样制作B吗?

1 个答案:

答案 0 :(得分:0)

这不是reinterpret_cast的目的。

大多数在线文档都有类似于

的免责声明
  

滥用reinterpret_cast运算符很容易造成不安全。除非   所需的转换本质上是低级别的,你应该使用其中一个   其他演员。

     

reinterpret_cast运算符可用于转换,例如   char * to int *,或One_class * to Unrelated_class *,这些本质上是   的不安全

此摘录来自MSDN。强调我的。