zoukankan      html  css  js  c++  java
  • C++中的类型转换——reinterpret_cast

    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

  • 相关阅读:
    Python 2, Python 3, Stretch & Buster
    React Native v0.4 发布,用 React 编写移动应用
    Web性能优化分析
    剖析页面绘制时间
    Web页面制作之开发调试工具
    AlloyRenderingEngine入门
    LFTP 4.6.2 发布,命令行 FTP 工具。这个东东可以用来做插件
    麻省理工的 Picture 语言:代码瘦身的秘诀
    2015超实用的前端开发指南
    手机软件没过多久就删了 APP到底得了什么病?
  • 原文地址:https://www.cnblogs.com/Galesaur-wcy/p/15215685.html
Copyright © 2011-2022 走看看