zoukankan      html  css  js  c++  java
  • 显示转换

    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把队形假想为模式(为了某种隐秘的目的),彷佛它是一个完全不同类型的对象。

  • 相关阅读:
    Java基础-String、StringBuffer、StringBuilder的区别
    Java基础-String类能被继承吗,为什么
    Java基础-Java中的基本数据类型是什么,各自占用多少字节
    JAVA关键字
    Java 栈(stack)与堆(heap) 详解
    Hibernate--hibernate.hbm.xml详解
    Hhibernate--映射继承关系
    C--c语言模拟java的linkedList
    C--调试基本命令
    C--指针
  • 原文地址:https://www.cnblogs.com/wiessharling/p/2953153.html
Copyright © 2011-2022 走看看