interpret_cast-任何积分或枚举类型的值都可以转换为指针类型



https://en.cppreference.com/w/cpp/language/reinterpret_cast

任何整数或枚举类型的值都可以转换为指针类型。

他们在这里不是在谈论结构和类,所以他们不包括在内?

它们还意味着,如果我有一个类似MyEnum obj;的枚举对象,那么obj可以转换为MyEnum *obj;

他们在这里不是在谈论结构和类,所以他们不包括在内?

正确。这可能在寻址后更有意义:

它们还意味着,如果我有一个类似MyEnum obj;的枚举对象,那么obj可以转换为MyEnum *obj;

否,枚举不会成为指向自身的指针。这意味着,如果obj是一个基础值为42的枚举,那么reinterpret_cast可以将其转换为指向内存位置42的指针,并且您可以声明您想要的任何类型的对象都驻留在那里。在大多数系统上,内存位置42是无效的,但您仍然可以使用类似SomeObject * ptr = reinterpret_cast<SomeObject *>(obj)的东西进行转换。试图取消引用这个指向内存位置42的指针可能会导致崩溃。

当一个整数需要通过只接受指针(不是100%可靠(的API传输,或者该整数保存将有效指针转换为整数类型的结果时,这种转换的有用性就来了。在后一种情况下,您询问的强制转换将变成反向操作,恢复原始指针。

相关内容

最新更新