Aracılığıyla paylaş


reinterpret_cast İşleci

Herhangi bir işaretçinin başka bir işaretçi türüne dönüştürülmesini sağlar. Ayrıca tüm integral türlerinin herhangi bir işaretçi türüne dönüştürülmesini ve tam tersinin yapılmasını sağlar.

Sözdizimi

reinterpret_cast < type-id > ( expression )

Açıklamalar

Operatörün reinterpret_cast kötüye kullanımı kolayca güvenli olmayabilir. İstenen dönüştürme doğal olarak düşük düzeyli değilse, diğer atama işleçlerinden birini kullanmanız gerekir.

işlecireinterpret_cast, doğası gereği güvenli olmayan , veya One_class* Unrelated_class*gibi char* int*dönüştürmeler için kullanılabilir.

sonucunun reinterpret_cast sonucu, özgün türüne geri döndürülmek dışında hiçbir şey için güvenli bir şekilde kullanılamaz. Diğer kullanımlar, en iyi durumda, raporlanamaz.

işleç reinterpret_cast , volatileveya __unaligned özniteliklerini atamazconst. Bu öznitelikleri kaldırma hakkında bilgi için bkz . const_cast İşleci .

işleci reinterpret_cast , null işaretçi değerini hedef türün null işaretçi değerine dönüştürür.

bunun pratik bir kullanımı reinterpret_cast , iki farklı değerin nadiren aynı dizine sahip olması için bir değeri dizine eşleyen bir karma işlevidir.

#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 işaretçinin tam sayı türü olarak değerlendirilmesini sağlar. Sonuç daha sonra bit kaydırılır ve benzersiz bir dizin (yüksek olasılıkla benzersiz) oluşturmak için kendisiyle XORed olur. Daha sonra dizin, işlevin dönüş türüne standart C stilinde bir yayın tarafından kesilir.

Ayrıca bkz.

Atama İşleçleri
Anahtar Sözcükler