此代码标准是否符合要求?

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.

  • @PavelBeliy好吧,我服从LRiO,但它是通过§5.2.10/ 7定义的. (2认同)