reinterpret_cast 演算子reinterpret_cast Operator

ポインターが他のポインター型に変換されることを許可します。Allows any pointer to be converted into any other pointer type. また、整数型から任意のポインター型への変換およびその逆の変換を許可します。Also allows any integral type to be converted into any pointer type and vice versa.

構文Syntax

reinterpret_cast < type-id > ( expression )

RemarksRemarks

不正使用、 reinterpret_cast演算子は簡単に安全でないあります。Misuse of the reinterpret_cast operator can easily be unsafe. 必要な変換が本質的に低レベルでない限り、他のキャスト演算子の 1 つを使用する必要があります。Unless the desired conversion is inherently low-level, you should use one of the other cast operators.

Reinterpret_cast演算子はなどの変換を使用できますchar*int*、またはOne_class*Unrelated_class*、これは本質的に安全ではありません。The reinterpret_cast operator can be used for conversions such as char* to int*, or One_class* to Unrelated_class*, which are inherently unsafe.

結果、 reinterpret_cast元の型にキャストされている以外は安全に使用することはできません。The result of a reinterpret_cast cannot safely be used for anything other than being cast back to its original type. その他の使用方法は、最高でも非ポータブルです。Other uses are, at best, nonportable.

Reinterpret_cast演算子はキャストできません、 const揮発性、または _ _unaligned属性。The reinterpret_cast operator cannot cast away the const, volatile, or __unaligned attributes. 参照してくださいconst_cast 演算子については、これらの属性を削除します。See const_cast Operator for information on removing these attributes.

Reinterpret_cast演算子は、null ポインターの値を変換先の型の null ポインター値に変換します。The reinterpret_cast operator converts a null pointer value to the null pointer value of the destination type.

実用的用途の 1 つreinterpret_castはハッシュ関数で、その 2 つの異なる方法でインデックスに値を割り当てる値ほとんどエンドを同じインデックスを持つ。One practical use of reinterpret_cast is in a hash function, which maps a value to an index in such a way that two distinct values rarely end up with the same index.

#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により、整数型として扱うへのポインター。The reinterpret_cast allows the pointer to be treated as an integral type. 結果は、一意のインデックス (高レベルの発生確率で一意) を生成するためにビット シフトされ、XOR されます。The result is then bit-shifted and XORed with itself to produce a unique index (unique to a high degree of probability). インデックスは、関数の戻り値の型への標準 C 形式のキャストにより切り捨てられます。The index is then truncated by a standard C-style cast to the return type of the function.

関連項目See also

キャスト演算子Casting Operators
キーワードKeywords