从一些C遗留代码我得到一些常数为int *
。在C++部分中,我有一个底层类型为int的枚举。在单个值基础上的枚举和int之间的转换工作。但是,int *
和enum *
之间的转换是不可能的。看下面的代码示例。如何转换int *和枚举*?
为什么会这样以及如何将指针转换为一些int值指向int枚举,反之亦然?我有点期待它的工作,因为单值转换的工作和基础类型是相同的。我阅读了大约What happens if you static_cast invalid value to enum class? ,但无法确定潜在无效值是否在此发挥作用。
int i = 3;
enum E : int;
E e;
e = static_cast<E>(i); // ok
i = static_cast<int>(e); // ok
int *j;
E * f;
j = static_cast<int *>(&i); // ok
f = static_cast<E *>(&i); // 'static_cast': cannot convert from 'int *' to 'E *'
j = static_cast<int *>(&e); // 'static_cast': cannot convert from 'E *' to 'int *'
// now use j and f
*j = *f;
你试过'reinterpret_cast'吗? – VTT
虽然您可以使用'reinterpret_cast'进行转换,但这样做很少有用。不能调用未定义的行为来解引用生成的指针。 – davmac
@davmac好像我应该确保我关闭严格的别名规则或开始考虑复制。感谢答案和下面的讨论,我现在更好地理解答案。 – Trilarion