我知道static_cast
是从一种类型到另一种类型的转换,(直觉上)是一种转换,在某些情况下可以成功,并且在没有危险转换的情况下也很有意义。同时,reinterpret_cast
是表示不安全转换的强制转换,该转换可能会将一个值的位重新解释为另一值的位。
有人可以描述一种情况,在这种情况下,代码将被编译,强制转换并且static_cast
不会引起问题,但是对于reinterpret_cast
来说会存在问题?
最佳答案
这样可以做到:
#include <iostream>
using namespace std;
struct C{int n;};
struct A{int n;};
struct B : A, C{};
int main()
{
B b;
B* pb = &b;
cout << static_cast<C*>(pb) << "\n";
cout << reinterpret_cast<C*>(pb);
}
请注意两个地址的差异。
我在这里建立了一些多重继承,并在基类中放置了一个显式成员,以规避可能将空基类的大小优化为零。
参见https://ideone.com/QLvBku