zoukankan      html  css  js  c++  java
  • C++中4个类型转换相关的关键字/特点/应用场合

    reinterpret_cast是C++里面的一个强制类型转换符,能够将任何的指针类型转换成其他的任何指针类型;能够将任何的整数类型转换成指针类型,反之亦然;滥用reinterpret_cast强制类型转换符不安全。除非要转换成的类型是固有的低级别的,不然要考虑使用其他的转换操作符。
    a、reinterpret_cast强制类型转换符能够将字符串类型的指针转换成整型指针(char *  ->  int *),某个类类型的指针转换成另外一个不相关类类型的指针(classA * -> class B *);这些转换不安全。
    b、使用reinterpret_cast强制转换之后的结果很不安全,除非用来转换成它的原始类型。
    c、reinterpret_cast不能用来移除变量的const、volatile等属性。
    d、reinterpret_cast可以将一个空类型的指针转换成一个目标类型的空指针值。
     
    2、static_cast < type-id > ( expression )
    static_cast将要转换的expression唯一的转换成type_id类型,在运行的时候也不检测是否这种转换之后的结果安全性。
    a、将一个基类的指针转换成派生类的指针,但是这种转换经常很不安全。但是将一个基类指针转换成基类指针或将派生类指针转换成派生类指针是安全的。
    b、static_cast可以执行任何的隐式转换,包括标准类型和用户自定义类型。
    c、static_cast可以显式的将整型转换成枚举类型,如果整型数据的值不在枚举类型值的范围之类,那么该枚举类型的值无效。
    d、static_cast可以将任何expression显式的转换成空类型,转换后的空类型可以选择性的包含const、volatile等属性。
    e、static_cast不能用来移除变量的const、volatile等属性。
     
    3、const_cast < type-id > ( expression )
    const_cast 可以用来移除一种类型的const、volatile等属性。
    a、常量指针转换成非常量指针,指针任然指向原来的对象,转换后,可以通过指针修改对象的值。
    b、常量引用被转换成非常量引用,任然引用原来的对象。
    c、const_cast可以将一个空类型的指针转换成一个目标类型的空指针值。
     
    4、dynamic_cast < type-id > ( expression )
    该运算符将expression转换成type_id类型的对象。type_id必须是类的指针,类的引用或者空类型的指针。
    a、如果type_id是一个指针类型,那么expression也必须是一个指针类型,如果type_id是一个引用类型,那么expression也必须是一个引用类型。
    b、如果type_id是一个空类型的指针,在运行的时候,就会检测expression的实际类型,结果是一个由expression决定的指针类型。
    c、如果type_id不是空类型的指针,在运行的时候指向expression对象的指针能否可以转换成type_id类型的指针。
    d、在运行的时候决定真正的类型,如果向下转换是安全的,就返回一个转换后的指针,若不安全,则返回一个空指针。
    e、主要用于上下行之间的转换,也可以用于类之间的交叉转换。上行转换时和static_cast效果一样,下行转换时,具有检测功能,比static_cast更安全。
     
  • 相关阅读:
    使用PHP类库PHPqrCode生成二维码
    ABAP报表中建立过滤器,并相互切换
    MM定价计算方案确定详细图解
    MIGO 屏幕增强
    SE14 激活表时提示进程正在运行
    供应商寄售
    屏蔽VA01的TA類型的銷售部門和銷售組
    屏蔽標準TCODE上的一些字段的顯示、隱藏或者強制輸入(轉)
    采购订单流程
    SAP 中如何修改透明表数据
  • 原文地址:https://www.cnblogs.com/songdanzju/p/7421875.html
Copyright © 2011-2022 走看看