C++中的4种显示类型转换(草稿)

类型转换在。我们编写程序时是不可避免的,比如我们分配一个内存区域,它将要存储的对象类型对编译器是不可知的。最典型的例子就是void*指针,调用malloc时会返回一个void*,编译器并不知道void*指向的对象类型。

由此可见,类型转换时不可以或缺的!下面我们介绍C++提供的4种显示类型转换,及继承自C的类型转换方式(Type)expression。本文的主要内容如下:

  • 写在前面
  • static_cast(exp)显示转换
  • reinterpret_cast(exp)显式转换
  • dynamic_cast(exp)显示转换
  • const_cast(exp)显示转换
  • 总结

1、写在前面


示类型转换有时是必需的,如前面提到的void *指针。我们必须将malloc返回的void*指针显示转换为特定的类型,eg.:int *
p=static_cast<int*>(malloc(100));还有如果我们想通过一个给定的十六进制数访问内存。这大大方便了我们编
程,但同时也带来了风险,用得不好将成为很多错误的根源!如你通过一个十六进数去访问内存可能会导致程序崩溃;如你内存转换时可能会截断原有数据……

因此我们在类型转换时必须得小心。

2、static_cast(exp)显示转换

static_cast类型转换用于相关类型之间的转换,诸如:在同一个类的继承层次关系中,向上或向下转换;枚举类型与整数类型之间的转换;浮点类型与指数类型之间的转换。

。。。

在这4中类型转换中,static_cast是最接近C-style的了。

 

3、reinterpret_cast(exp)显式转换


面理解即re-interpret,重新解析(释)的意思。故名思意,它主要用于不相关类型之间的转换,好一个英文单词在不同的上下文中,词性和词义可能
完全不同。它为不同类型之间转换带来的便利,但是也伴随着风险的,如将一个十六进制整数转换为内存地址(由int-->指针类型,这两种类型完全不
关联)。既然是用于不相关类型之间的转换,也就意味着编译器不会做太多的确认和承诺。

reinterpret_cast方式还有一个特点就是:目标和原始值之间至少有相同的位数,我们可以将转换之后的值再转换回去,而不像其它3种类型可能会导致精度丢失。

。。。。。。。。。

4、dynamic_cast(exp)显示转换

一种运行时(run-time)检测的类型转换,因此转换可能需要较大的运行时代价,这种类型也是用C-style是无法实现的。主要用于执行类型向下转换和继承之间的转换。

。。。。

5、const_cast(exp)显示转换

用于消除变量的const限定,转换之后的变量就不再具有“const”了,如果是一个const指针的话,转换之后可以改变指向而指向其它对象。

。。。。。

6、总结

用C-style的(Type)expression的格式转换,可以用我们上面介绍的4种方式来替代。虽然C++中可以使用C-style的形式仍可用,但更加建议使用上面的4中类型。因为C-style的类型转换更加危险:

  • 在一个大型程序中更难定位和识别
  • 哪种类型转换并不明显

而用上面的四种方式可以更加准确地定位哪种类型转换发生了错误。

时间: 2024-10-28 17:59:34

C++中的4种显示类型转换(草稿)的相关文章

C++中四种显示类型转换总结

#include <iostream> using namespace std;   /*  *四种显示类型转换  **/   int main(){      /* static_case 类型转换*/     double a=1.1213;     int b=static_cast<int>(a);     class base{};     class father:public base{};     father f;     base ba=static_cast&

c++中四种强制类型转换及区别对比

C++四种强制类型 reinterpret_cast<目标类型>(原类型变量)//重解释类型转换  dynamic_cast<new_type>(expression)//动态类型转换  static_cast<new_type>(expression)//静态类型转换  const_cast<new_type>(expression)//返回一个指向非常量的指针   1.const_cast:常量指针被转化成非常量的指针,并且仍然指向原来的对象:常量引用被

解析C++中四种强制类型转换的区别详解_C 语言

C++的四种强制类型转换,所以C++不是类型安全的.分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型.那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换.C++中风格是static_cast<type>(content).C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干

C++中的四种类型转换_C 语言

1 引子 这篇笔记是根据StackOverflow上面的一个问题整理而成,主要内容是对C/C++当中四种类型转换操作进行举例说明.在之前其实对它们都是有所了解的,而随着自己在进行总结,并敲了一些测试示例代码进行验证之后,对它们的理解又深刻了一些. 总所周知,在C++ 当中引入了四种新的类型转换操作符:static_cast, dynamic_cast, reinterpret_cast,还有const_cast.就自己见过的一些C++代码当中,它们的使用其实并不普遍.不少程序员依然乐于去使用C-

Windows 8开发入门(十五) Windows 8中的4种视图状态和锁屏通知

在Windows 8中的应用程序在默认打开时是全屏的,此时我们如果需要看其他应用程序就只能回到Metro 起 始页面重新选择其他程序吗?这样就会很麻烦,所以Windows 8应用程序有4种视图状态 (ApplicationViewState),类似于普通窗口程序的最小化.最大化一样可以看到其他应用程序同时允许多个应 用程序的使用. 视图状态切换方法:用鼠标点击屏幕最上方按住不放往右或者往左拖动.移动中间间 隔栏等等. ApplicationViewState: // 摘要: // 当前应用程序的

在Excel 2007中快速隐藏和显示特定行列

有时候同一份Excel表格需要几种不同的显示格式.比如工资记录表,财会人员在处理时可能需要同时显示人员的职称.等级等相关信息,但在打印出来给员工看的时候这些信息就没必要显示了,只要有金额就行了.这就需要在打印给员工看的列表前把这些职称.等级等特定列隐藏起来.这样老是重复隐藏显示行列显然很麻烦.在Excel2007中有两种方法可以快速隐藏显示特定行列. 第一招:分级显示 Excel中的分级显示功能可以简单实现快速隐藏.显示指定行列.以隐藏职称.等级.业绩所在的C.D.F列为例: 选中C.D列,切换

win7系统在word文档中插入图片后显示不全怎么办?

  win7系统在word文档中插入图片后显示不全怎么办? 1.选中图片,右键,改变文字环绕的类型,例如"浮于文字上方"; 2.图片已显示完整,挪动图片至合适的位置即可. 解决方法二: 1.在不能改变文字环绕方式的情况下,方法一就不适用了,此时我们可以采取第二种方法; 2.在开始选项卡中点击"段落"右下的箭头符号; 3.在"缩进和间距"下改变行距为"单倍行距"; 4.点击确定; 5.此时图片就全部显示出来了.

Word2013中以不同颜色突出显示文本的方法

  第1步,打开Word2013文档窗口,在"开始"功能区的"字体"分组中单击"以不同颜色突出显示文本"下拉三角按钮,并在颜色面板中选择一种颜色. 第2步,将光标移动到文本内部,鼠标指针将变成荧光笔形状,拖动鼠标选中需要突出显示的文本即可. 第3步,完成突出显示文本的设置后,单击"以不同颜色突出显示文本"下拉三角按钮,在颜色面板中单击"停止突出显示"按钮取消突出显示设置状态. Word Home提示:如果要

iOS 中的 21 种设计模式

iOS 中的 21 种设计模式 对象创建原型(Prototype) 使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象. 1 2 NSArray *array = [[NSArray alloc] initWithObjects:@1, nil]; NSArray *array2 = array.copy; array 就是原型了,array2 以 array 为原型,通过 copy 操作创建了 array2. 当创建的实例非常复杂且耗时,或者新实例和已存在的实例值相同,使用原型模式