C++中的型別轉換——reinterpret_cast
阿新 • • 發佈:2021-09-03
reinterpret_cast 重新解釋型別
此外.....記憶體地址不變
https://blog.csdn.net/wangshubo1989/article/details/49133667
reinterpret_cast作用為:
允許將任何指標轉換為任何其他指標型別。 也允許將任何整數型別轉換為任何指標型別以及反向轉換。
看著上面的描述就有種放浪形骸的趕腳。更會讓人不寒而慄,太隨意!
語法還是老樣子:
reinterpret_cast < type-id > ( expression )
濫用 reinterpret_cast 運算子可能很容易帶來風險。 除非所需轉換本身是低級別的,否則應使用其他強制轉換運算子之一。
reinterpret_cast 運算子可用於 char* 到 int* 或 One_class* 到 Unrelated_class* 之類的轉換,這本身並不安全。
reinterpret_cast 的結果不能安全地用於除強制轉換回其原始型別以外的任何用途。 在最好的情況下,其他用途也是不可移植的。
reinterpret_cast 運算子不能丟掉 const、volatile 或 __unaligned 特性。 有關移除這些特性的詳細資訊,請參閱 const_cast Operator。
reinterpret_cast 運算子將 null 指標值轉換為目標型別的 null 指標值。
reinterpret_cast 的一個實際用途是在雜湊函式中,即,通過讓兩個不同的值幾乎不以相同的索引結尾的方式將值對映到索引。(我也不懂,求指導)
msdn上給的程式碼
#include <iostream> using namespace std; // Returns a hash code based on an address unsigned short Hash( void *p ) { unsigned int val = reinterpret_cast<unsigned int>( p ); return ( unsigned short )( val ^ (val >> 16)); } using namespace std; int main() { int a[20]; for( int i = 0; i < 20; i++ ) cout << Hash( a + i ) << endl; } Output: 64641 64645 64889 64893 64881 64885 64873 64877 64865 64869 64857 64861 64849 64853 64841 64845 64833 64837 64825 64829