c++类型转换

静态转换

格式:

static_cast<目标类型>(原始对象)
  • 可以进行基础数据类型转换
  • 父与子类型转换
  • 没有父子关系的自定义类型不可以转换

例:

class Base{};

class Child:public Base{};

class Other{};

void test()

{

Base *base=NULL;

Child* child=NULL;
//把base转为Child*类型 向下转型  不安全

Child*Child2=static_cast<Child*>(base);
//把child 转为Base* 向上转型  安全
Base*base2=static_cast<Base*>(child);
//无效转换
//Other* other=static_cast<Other*>(base);
}

动态转换

格式:

dynamic_cast<目标类型>(原类型);
  • 基础类型不可以转换
  • 非常严格,失去精度或者不安全都不可以转换

父子之间可以转换

  • 父转子不安全
  • 子转父安全
  • 如果发生了多态,都可以转换
class Base{
virtual void func() {};
};

class Child:public Base{
virtual void func() {};
};

class Other{};
void test()
{
    Base* base = NULL;

    Child* child = NULL;
    //把base转为Child*类型 向下转型  不安全

    //Child* Child2 = dynamic_cast<Child*>(base);
    //把child 转为Base* 向上转型  安全
    Base* base2 = dynamic_cast<Base*>(child);
    Base* base3 = new Child;
    Child* Child3 = dynamic_cast<Child*>(base3);

    
};

常量转换

常量转换(const_cast)

  • 该运算符用来修改类型得const属性

  • 常量指针被转化成非常量指针,并且仍然指向原来得对象

  • 常量引用被转换成非常量引用,并且仍然指向原来得对象

    例:

    //取出const

    const int * p=NULL;
    
    int *newp=const_cast<int *>(p)
    

    //加上const

     int * p=NULL;
    
    const int *newp=const_cast<cosnt int *>(p)
    

    //不能对非指针或非引用的变量进行转换

    //const int a=10;
    
    //int b=const<int>(a);错误
    

    常量引用转换成非常量引用

    int num=10;
    
    int &refNum=num;
    
    const int &refNum2=const_cast<const int&>(refNum);
    

注意:不能直接对非指针和非引用得变量使用const_cast操作符去直接移除它的const

重新解释转换(reinterpret_cast)

不推荐使用,最不安全,最鸡肋

int a=10;

int *p=reinterpret_cast<int*>(a);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0.目录 隐式转换1.1 数值提升1.2 数值转换1.3 限定性转换 显示转换2.1 C风格转换2.2 stati...
    lllnan阅读 1,725评论 0 0
  • 1.实现隐式类类型转换 short a=2000; int b; b=a; short是两字节,int是四字节,由...
    程序爱好者阅读 899评论 0 1
  • C++类型转换总结 本章内容:1 前言2 static_cast3 dynamic_cast4 const_cas...
    Haley_2013阅读 959评论 0 50
  • static_cast 静态转换类似于C风格显式转换,但是会判断转换类型之间的关系,如果转换类型之间没有任何关系,...
    宋大壮阅读 594评论 0 0
  • static_cast 用于类层次结构中,基类和子类之间指针和引用的转换。进行上行转换,也就是把子类的指针或引用转...
    第八区阅读 495评论 0 0