即使由类B
分配的内存不足以托管类A
的所有成员,以下程序也可以正常运行。
// CPP code to illustrate the pointer reinterpret
#include <iostream>
using namespace std;
class A {
public:
void fun_a()
{
cout << " In class A\n";
}
int Val;
int Res;
};
class B {
};
int main()
{
// creating object of class B
B* x = new B();
A* new_a = reinterpret_cast<A*>(x);
// accessing the function of class A
new_a->fun_a();
new_a->Val = 10;
new_a->Res = 20;
cout << new_a->Val;
cout << new_a->Res;
return 0;
}
答案 0 :(得分:5)
通过不指向类型为T
(或兼容类型)的对象的指向T
的指针进行间接操作会导致不确定的行为。
以下程序运行没有问题,
似乎没有任何问题的情况下运行的程序是未定义行为的示例。
答案 1 :(得分:1)
您的代码调用 Undefined Behavior (UB),这意味着它可以按您期望的方式工作(例如,今天在您的计算机中),但 保证。
您是正确的,认为此代码是不正确的,并且您只是(不幸地)幸运地发现它“可以在您的计算机上工作”!
答案 2 :(得分:0)
这是未定义的行为。当我们知道它是安全的时,我们应该使用reinterpret_cast。 例如,您要使用套接字编程发送对象。在那里,Api将数据作为字符缓冲区,因此您可以在其中使用它作为 A * new_a =新的A(); char * new_Data = reinterpret_cast(new_a); 在接收端,您必须使用通过reinterpret_cast进行的反转操作,但这一次是从char *到A *; 当您知道它很安全时,这就是一种情况。