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传输,或者该整数保存将有效指针转换为整数类型的结果时,这种转换的有用性就来了。在后一种情况下,您询问的强制转换将变成反向操作,恢复原始指针。