從一些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