C++提供了四个显式的数据类型转换函数

操作方法

  • 01

    1 reintERPret_cast(在编译期间实现转换) reinterpret_cast类型转换函数将一个类型的指针转换成另一个类型的指针。这种转换不用于修改指针变量值数据存放的格式(不改变指针变量值),只需在编译期间重新解释指针的类型就可以做到。 reinterpret_cast可以将指针值转换为一个整型数。但是不能用于非指针类型的转换,否则将不会通过编译。 什么时候使用reinterpret_cast进行数据类型的转换?达内IT老师为大家带来答案。 (1)将基本类型指针转换成另一个类型的指针。 例如: 基本类型指针的转换 double d = 9.3;  double *pd = &d;  int *pi = reinterpret_cast<int *>(pd);//相当于隐式转换int * pi = (int *)pd; (2)将一个类的指针转换为另一个类的指针。 类指针类型的转换: class A{};  class B{};  A* pa = new A;  B* = reinterpret_ cast<B*>pa; (3)不能转换非指针类型 例如: 将int类型转换为float类型时是不能够转换成功的 int i = 8; double dl = reinterpret_cast<double>(i); (4)不能将一个const指针转换成void*类型的指针 const int* pci = 0; void *pv = reinterpret_cast<void*>(pci); 2 const_cast(在编译期间实现转换) const_cast用于去除指针变量的常量属性,将它转换为一个对应指针类型的普通变量,反过来,也可以将一个非常量的指针变量转换为常量指针变量。这种转换是在编译期间作出的类型更改。 (1)将常量指针变量转换为对应指针类型的普通变量 const int *pci = 0; int* pj = const_cast<int*>(pci);//相当于隐式转换int* pj = (int*)pci; (2)将普通指针变量转换为一个常指针变量 int* pi =0; const int* pcj = const_cast<const int*>(pi);//相当于隐式转换const int* = (int*)pi (3)将类的常指针变量转换为类的普通指针变量 const A* pca = new A; A* pa = const_cast<A*>(pca);//相当于隐式转换A* pa = (A*)pca; (4)无法将非指针的常变量转换为普通变量,无法将非指针的普通变量转换为常变量。 int i =0; const int cj = const_cast<const int>(i);//非指针转换,不能通过编译 (5)但可以通过隐式转换将非指针的普通变量转换为常变量。 int i = 0; const int ck = (const int)(i); 3 stactic_cast(在编译期间实现转换) stactic_cast主要用于基本类型之间和具有继承关系的类型之间的转换,这种转换一般会改变变量的内部表示方式,因此static_cast用于指针的转换没有太大的意义。即使允许指针类型的转换,也不及reinterprret转换的效率高。 (1)基本类型之间的转换 int i =0 ; double d = static_cast<double int>(); (2)继承类型转换为基类 class Base{};  class Derived :public Base{};  Derived d;  Base b = static_cast<Base>(d); (3)继承类与基类指针进行转换编译能通过,但是基类转换为继承类指针具有一定的危害性 Dereived* pd = new Derived ; Base *PB = static_cast<Base*>(pd); (4)不能使用static_cast转换基本类型的指针 int* pi = 0; double* pd = static_cast<double>(pi); (5)不能把基类转换为继承类或转换无继承关系的类的指针 4 dynamic_cast(在运行期间实现转换,并可以返回转换成功与否的标志)

(0)

相关推荐

  • Python函数基础详解

    这篇文章主要讲解函数的创建,函数的调用以及匿名函数.在编写python代码的时候经常用到,下面就来详细讲解一下,同大家一同分享. 操作方法 01 创建函数-----def语句 <1>  函 ...

  • JAVA与C,C++的区别

    Java 是由 C++发展而来的,保留了 C++的大部分内容,其编程方式类似于 C++.但 Java 的句法更清晰.规模更小.更易学.Sun 公司对多种程序设计语言进行了深入研究,并摒弃了其他语言的不 ...

  • 防御XSS的七条原则

    攻击者可以利用XSS漏洞向用户发送攻击脚本,而用户的浏览器因为没有办法知道这段脚本是不可信的,所以依然会执行它.对于浏览器而言,它认为这段脚本是来自可以信任的服务器的,所以脚本可以光明正大地访问Coo ...

  • VBS基础教程:[8]常用运算符与函数

    操作方法 01 基本运算 + 数字加法及字符串连接 - 数字减法 * 数字乘法 / 数字除法 Mod 求余数 \ 求商数 & 字符串连接 ^ 次方 = 相等 <> 不相等 < ...

  • 交换式路由器与路由式交换机简析

    现在路由器和交换机之间的区别也越来越模糊,多层路由器与交换机都可以同时实现交换和路由的功能,它们之间还有不同吗?各自特点何在?如何更好地根据应用需求进行选择? 一、传统的交换机和路由器 普通交换机工作 ...

  • 显卡的显存是什么?

    每次有新显卡发布,A饭.N饭们激烈争论的内容都非常细致,除了显卡的游戏性能.功耗.温度等关键指标之外,显存位宽也是争议点之一,高端显卡用384bit位宽甚至512bit位宽没什么问题,再次一点的显卡用 ...

  • JSP四种注释方法及相关注意项

    JSP是JavaWe开发心备的技术,它的注释分为四种,下面一一介绍! 操作方法 01 一.显式注释 <!--注释内容--> 这种注释方法只能在<%%>  外  面,否则无效 所 ...

  • 全程讲解C++的四种强制转换

    操作方法 01 C++的强制转换大致分为四种,每一种的作用有哪些?怎么操作?在达内C++培训的课余时间跟大家全程讲解一下. 02 1 static_cast < type-id > ( e ...

  • 显存频率及SDRAM,DDR,DDR2,DDR3显存介绍

    显存频率是指默认情况下,该显存在显卡上工作时的频率,以MHz(兆赫兹)为单位。显存频率一定程度上反应着该显存的速度。显存频率随着显存的类型、性能的不同而不同,SDRAM显存一般都工作在较低的频率上,一 ...