C++提供了reinterpret_cast用于任意类型的转换,即reinterpret_cast运算符允许将任意指针转换到其他指针类型,也允许做任意整数类型和任意指针类型之间的转换。转换时,执行的是逐个比特复制的操作。reinterpret中文意为“重新解释; 重新诠释;”。
(1)它用于将某种数据类型的指针转换为另一种数据类型的指针,即使转换前后的数据类型不同;
(2)它不检查指针类型和指针指向的数据是否相同。
int main()
{
int* p = new int(65);
char* ch = reinterpret_cast<char*>(p);
cout << *p << endl; // 65
cout << *ch << endl; //A
cout << p << endl; //00D5FD70
cout << ch << endl; //A
}
使用reinterpret_cast的目的:
1.reinterpret_cast 是一种非常特殊且危险的类型转换运算符。并建议使用适当的数据类型来使用它,即(指针数据类型应与原始数据类型相同)。
2.它可以将任何指针类型转换为任何其他数据类型。
3.当我们想要使用按位转换时使用它。
4.如果我们使用这种类型的转换,那么它就变成了一种不可移植的产品。因此,除非需要,否则建议不要使用这个概念。
5.它仅用于将任何指针类型转换为其原始类型。
6.布尔值将被转换为整数值,即 0 表示假,1 表示真。
class A {
public:
void fun_a()
{
cout << " In class A\n";
}
};
class B {
public:
void fun_b()
{
cout << " In class B\n";
}
};
int main()
{
B* x = new B();
A* new_a = reinterpret_cast<A*>(x);
new_a->fun_a(); //输出:In class A
return 0;
}