Pav*_*liy 1 c++ language-lawyer c++11 c++98 c++14
所以代码是
class A
{
public:
int i;
A(){
i = 5;
}
};
class B : public A
{
public:
void someFunc();
};
class C
{
A myObj;
public:
void func(){
B* foo = reinterpret_cast<B*>(&myObj);
foo->someFunc();
}
};
Run Code Online (Sandbox Code Playgroud)
假设类将保持原样并且永远不会改变,那么reinterpret_cast的使用是否正确(我认为它不是)?如果没有,这里违反了C++标准的哪些部分(你可以使用任何版本)?
Col*_*mbo 10
你的程序确实会诱导UB.§9.3.1/ 2:
如果为非
X类型的对象X或派生类型的对象调用类的非静态成员函数X,则行为未定义.
A不是类型B或类型派生的B.