reinterpret_cast

发布时间 2023-03-28 21:25:52作者: Clemens

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;
}