reinterpret_cast应用

Posted 李金吉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了reinterpret_cast应用相关的知识,希望对你有一定的参考价值。

reinterpret_cast 的一个实际用途是在哈希函数中,即,通过让两个不同的值几乎不以相同的索引结尾的方式将值映射到索引。

#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 允许将指针视为整数类型。结果随后将按位移位并与自身进行“异或”运算以生成唯一的索引(具有唯一性的概率非常高)。该索引随后被标准 C 样式强制转换截断为函数的返回类型。

以上是关于reinterpret_cast应用的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中进行reinterpret_cast以获取像素数组[重复]

reinterpret_cast 在 char* 指针上

ifstream::read 不读取无符号字符,即使使用 reinterpret_cast

reinterpret_cast 用法

reinterpret_cast

C++标准转换运算符reinterpret_cast