zoukankan      html  css  js  c++  java
  • C++四种类型转换

    错误转(以下内容经查有误导请不要看)转载:http://blog.csdn.net/bian_qing_quan11/article/details/70788312

    1、  static_cast:

    功能:完成编译器认可的隐式类型转换。

    格式type1 a;

    type2 b = staic_cast<type1>(a);将type1的类型转化为type2的类型;

    使用范围:

    (1)基本数据类型之间的转换,如int->double;

    int a = 6;

    double b = static_cast<int>(a);

    (2)派生体系中向上转型:将派生类指针或引用转化为基类指针或引用(向上转型);

    class base{       ….     }

    class derived : public base{      ….     }

    base *b;

    derived *d = new derived();

    b = static_cast<base *>(d);

    2、  dynamic_cast

    功能:执行派生类指针或引用与基类指针或引用之间的转换。

    格式:

    (1)      其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行运行时类型检查;

    (2)      基类中要有虚函数,因为运行时类型检查的类型信息在虚函数表中,有虚函数才会有虚函数表;

    (3)      可以实现向上转型和向下转型,前提是必须使用public或protected继承;

    例子:

    向上转型:

    class base{       …      };

    class derived : public base{      …      };

    int main()

    {

    base *pb;

    derived *pd = new derived();

    pb = dynamic_cast<base *>(pd);

    return 0;

    }

    向下转型:

    class base{       virtualvoid func(){}           };

    class derived : public base{      void func(){}      };

    int main()

    {

    base *pb = new base();

    derived *pd = dynamic_cast<derived *>(pb);//向下转型

    return 0;

    }

    3、const_cast:

    只能对指针或者引用去除或者添加const属性,对于变量直接类型不能使用const_cast;不能用于不同类型之间的转换,只能改变同种类型的const属性。

    如:

    const int a= 0;

    int b = const_cast<int>(a);//不对的

    const int *pi = &a;

    int * pii = const_cast<int *>pi;//去除指针中的常量性,也可以添加指针的常量性;

    const_cast的用法:

    (1)常用于函数的形参是一个非const的引用,我想要穿进去一个const的引用,可以使用const_cast<Type&>para;去除实参的常量性,以便函数能够接受这个参数。

    (2)一个const对象,我们想要调用该对象中的非const函数,可以使用const_cast去除对象的常量性;

    4、reinterpret_cast:

    从字面意思理解是一个“重新解释的类型转换”。也就是说对任意两个类型之间的变量我们都可以个使用reinterpret_cast在他们之间相互转换,无视类型信息。

    不常使用。

     
     
  • 相关阅读:
    插入排序
    APPlication,Session,Cookie,ViewState和Cache之间的区别
    sqlserver 2005新特性
    选择排序
    Transact_SQL小手册
    装箱和取消装箱
    select语句的执行步骤:
    using 的三种用法
    创建索引及撤销
    (转译)用FFmpeg和SDL写播放器08软件缩放
  • 原文地址:https://www.cnblogs.com/dobben/p/7446930.html
Copyright © 2011-2022 走看看