• 显示转换


    1、静态转换   static_cast

      static_cast 全部用于明确定义的变换,包括编译器允许我们所做的不用强制转换的“安全”变换和不太安全但清楚定义的变换。

      static_cast包含的转换类型包括典型的非强制变换窄化(有信息丢失)变换,使用void* 的强制变换、隐式类型变换和类层次的静态定位

        int i = 0x7fff;//32767
        long l;
        float f;
        //Typical castless conversions:
        l = i;
        f = i;
        cout<<l<<endl;
        cout<<f<<endl;
        //Static_cast conversions:
        l = static_cast<long>(i);
        f = static_cast<float>(i);
        cout<<l<<endl;
        cout<<f<<endl;
        //Narrowing conversions:
        i = l;
        i = f;
        cout<<i<<endl;
        cout<<i<<endl;
        i = static_cast<int>(l);
        i = static_cast<int>(f);
        char c = static_cast<char>(i);
        cout<<i<<endl;
        cout<<i<<endl;
        cout<<i<<endl;

      2、常量转换 const_cast

        如果从const转换为非const 或 从volatile转换为非volatile, 可以使用const_cast 。这是const_cast 唯一允许的转换;如果进行别的转换就可能使用单独的表达式或者可能会得到一个编译错误。

        

    const int a = 0;
        int* j = (int*)&a;// Deprecated form
        j = const_cast<int*>(&a);// Preferred
        //Can't do simultaneous additional casting:
         long* l = const_cast<long*>(&a);  //Error//!“const_cast”: 无法从“const int *”转换为“long *”
    
        volatile int k = 0;
        int* u = const_cast<int*>(&k);

      3、重解释转换 reinterpret_cast

        这是最不安全的一种转换机制,最有可能出问题。reinterpret_cast把队形假想为模式(为了某种隐秘的目的),彷佛它是一个完全不同类型的对象。

  • 相关阅读:
    response.setContentType()的作用及参数
    MyEclipse的一些设置
    web项目更改文件后缀,隐藏编程语言
    IntelliJ IDEA 部署远程服务
    java操作cookies
    Java 处理图片 base64 编码的相互转换
    递归与非递归二分查找实现
    js实现url链接encode加密
    mysql 中 SQL_CALC_FOUND_ROWS 功能
    Java 微信登录授权后获取微信用户信息昵称乱码问题解决
  • 原文地址:https://www.cnblogs.com/wiessharling/p/2953153.html
Copyright © 2020-2023  润新知