参考:https://www.zhihu.com/question/421767822/answer/1481328334

(从 int *int的转换损失精度)

 

做了如下测试:

class A {
    public:
        A() {}

        A(const A* pa) {
            a[0] = pa->a[0];
        }
        int a[8];
};

int main() {
    A *a = new A();
    a->a[0] = 2;
    printf("a:%ld, %ld\n", a, &a);
    // auto aa = reinterpret_cast<A>(a); // error
    // A aa = (A)(a);
    A aa = static_cast<A>(a);
    cout<<aa.a[0]<<endl;
auto bb = reinterpret_cast<size_t>(a); // bb是size_t类型
}

类对象指针强转为类对象,需要类里面实现这种转换的构造函数,否则会报错。不过即使实现了这类构造函数也不能用reinterpret_cast,要用static_cast。

可以把指针类型转换为长整型。

 

posted on 2021-07-29 15:04  SimbaStar  阅读(679)  评论(0编辑  收藏  举报