• 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

  • 相关阅读:
    正则表达式实现密码检查
    用ueditor上传图片、文件等到七牛云存储
    cas单点登录流程
    移动端 触摸事件 ontouchstart、ontouchmove、ontouchend、ontouchcancel
    新开博客
    深入理解Mysql数据库主从延迟
    js 关于下载文件如何判断是否下载成功
    [我还会回来的]asp.net core再战iris
    nrm的使用
    innodb_flush_log_at_trx_commit参数测试
  • 原文地址:https://www.cnblogs.com/Galesaur-wcy/p/15215685.html
Copyright © 2020-2023  润新知