次の方法で共有


reinterpret_cast 演算子

ポインターが他のポインター型に変換されることを許可します。 また、整数型から任意のポインター型への変換およびその逆の変換を許可します。

reinterpret_cast < type-id > ( expression )

解説

reinterpret_cast 演算子の誤用により簡単に安全でない状態になります。 必要な変換が本質的に低レベルでない限り、他のキャスト演算子の 1 つを使用する必要があります。

reinterpret_cast 演算子は、本質的に安全でない char* から int* へ、One_class* から Unrelated_class* へなどの変換に使用できます。

reinterpret_cast の結果は、元の型にキャスト バックする場合以外は安全に使用することはできません。 その他の使用方法は、最高でも非ポータブルです。

reinterpret_cast 演算子は、const 属性、volatile 属性、または __unaligned 属性をキャストできません。 これらの属性の削除については、「const_cast 演算子」を参照してください。

reinterpret_cast 演算子は、null ポインター値を変換先の型の null ポインター値に変換します。

reinterpret_cast の実用的な使用方法の 1 つは、2 つの異なる値が同じインデックスで終わることがほとんどないようにインデックスに値を割り当てるハッシュ関数での使用です。

#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

reinterpret_cast は、ポインターが整数型として処理されることを許可します。 結果は、一意のインデックス (高レベルの発生確率で一意) を生成するためにビット シフトされ、XOR されます。 インデックスは、関数の戻り値の型への標準 C 形式のキャストにより切り捨てられます。

参照

関連項目

キャスト演算子

C++ キーワード