zoukankan      html  css  js  c++  java
  • 【C++】类型转换简述:四种类型转换方式的说明及应用

      本文主要简述在C++中四种类型转换的方式:static_cast、reniterpret_cast、const_cast和dynamic_cast.

      在介绍C++类型转换方式之前,我们先来看看C语言的类型转换.

      在C语言中,类型转换非常容易,我们想将int a转换为char a只需:(char)a即可,简单方便!

      简单方便的同时也存在一些缺陷:

      1.C语言中的类型转换太过于“笼统”,它可以使任意类型进行相互转换,而不同类型转换之间的差别是巨大的,但C语言却并没有做出明确的区分.

      2.C语言的类型转换不易于查找,庞大的代码中,我们想找某种特定的类型转换宛如大海捞针.

      因此,C++提供了四种类型转换的机制,分别为static_cast、reniterpret_cast、const_cast和dynamic_cast.

    static_cast

      static_cast,从字面上来理解就是"静态转换".

      它是最常用的类型转换符,主要用于内置数据类型之间的相互转换,在编译期间进行处理.如:

    int a = 10;
    char b = (char)a;                     //c风格转换
    char c = static_cast<char>(a);        //c++风格转换
    

     const_cast

      const_cast,从字面上来看就知道是"const类型转换"的.

      它可以将const变量转换为非const属性,或者,将非const变量转换为const变量.不能用于不同类型变量转换!!!如:

    const int a = 10;
    int b = (int)a;                    //C语言类型转换
    int c = const_cast<int>(a);        //C++类型转换    
    

    dynamic_cast

      dynamic_cast,从字面上来理解"动态类型转换".

      它用于派生类与基类之间的转换(主要将基类指针或引用转换为派生类指针或引用),转换时会进行类型安全检查.如:

    Base *pBase = new Base();
    Derive *pDerive = dynamic_cast<Derive*>(pBase);
    

      注:

      1.它不能进行不同类型变量的转换.

      2.dynamic_cast只能用于含有虚函数的类.

      3.dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回0. 

    reinterpret_cast

      从字面上来理解reinterpret_cast,其含义为"重新解释转型".

      它与C语言中的强制转换具有相同功能,它可以用于内置类型的相互转换,也可以将内置类型转换为其他类型,其机理是"对二进制进行重新解释",不会改变之前的格式.

    int a = 0x0018ff44;
    int* b = static_cast<int*>(a); //编译失败! int* c = reinterpret_cast<int*>(a); //编译成功!
  • 相关阅读:
    2018年第九届蓝桥杯【C++省赛B组】第二题 明码
    2018年第九届蓝桥杯【C++省赛B组】第三题 乘积尾零
    2018年第九届蓝桥杯【C++省赛B组】第四题 测试次数
    L2-023 图着色问题
    L2-011 玩转二叉树
    获取当前的时间,转化为char[]格式unix时间戳
    创建子进程
    strerror
    gdb
    gcc
  • 原文地址:https://www.cnblogs.com/qq329914874/p/6806034.html
Copyright © 2011-2022 走看看