考虑以下示例:
#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
它有效,但我不确定我是否在这里找到某种UB
。也许有人可以参考标准?
我提供了这种情况,因为我有两个类(B
,C
),在某些模块中,我只需要使用B
的一部分功能({{1}的功能)。但我已经实例化了课程C
,我可以像我一样制作B
吗?
答案 0 :(得分:0)
这不是reinterpret_cast的目的。
大多数在线文档都有类似于
的免责声明滥用reinterpret_cast运算符很容易造成不安全。除非 所需的转换本质上是低级别的,你应该使用其中一个 其他演员。
reinterpret_cast运算符可用于转换,例如 char * to int *,或One_class * to Unrelated_class *,这些本质上是 的不安全强>
此摘录来自MSDN。强调我的。