我正在看这个答案,我想知道是否使用reinterpret_cast将对象转换为第一个成员并使用结果在C++中是安全的.
假设我们有一个A类,一个B类和一个B的实例b:
class A{
public:
int i;
void foo(){}
};
class B{
public:
A a;
};
B b;
Run Code Online (Sandbox Code Playgroud)
问题1:使用这样的ba是否安全:reinterpret_cast<A*>(&b)->foo()
?
注意:在一般情况下,我们假设类及其成员都是标准布局.
我关于reinterpret_cast的可用引用的讲座告诉我这样的用法应该被授权,因为没有别名违规,但是它与许多答案冲突,比如这个.
问题2:使用这样的ba是否安全:static_cast<A*>(static_cast<void*>(&b))->foo()
?
c++ type-conversion undefined-behavior reinterpret-cast c++11