文档章节

static_cast, dynamic_cast, const_cast探讨

yintao
 yintao
发布于 2014/05/08 23:42
字数 432
阅读 32
收藏 0

一、隐式类型转换

二、显示类型转换

static_cast

用法:static_cast < type-id > ( expression )

说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。

需要转换的几种情况:

情况1:void指针->其他类型指针
情况2:改变通常的标准转换
情况3:避免出现可能多种转换的歧义


dynamic_cast

用法:dynamic_cast < type-id > ( expression )

说明:该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *;如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。

需要转换的情况:

dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。


reinterpret_cast

用法:reinpreter_cast<type-id> (expression)

说明:type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值)。

需要转换的情况:用法比较多


const_cast

用法:const_cast<type_id> (expression)

说明:该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。type_id只能是指针和引用。

本文转载自:http://www.cnblogs.com/chio/archive/2007/07/18/822389.html

共有 人打赏支持
上一篇: 运算符重载
yintao
粉丝 7
博文 63
码字总数 45783
作品 0
大连
程序员
私信 提问
C++雾中风景11:厘清C++类型转换(static_cast,dynamic_cast,reinterpret_cast,const_cast)

C++是一门弱类型的语言,提供了许多复杂和灵巧类型转换的方式。笔者之前写的Python与Go都是强类型的语言,对这种弱类型的设计实在是接受无力啊 ( 生活所迫,工作还得写C++啊)C++语言提供了...

LeeHappen
09/29
0
0
static_cast, dynamic_cast, const_cast

【C++专题】staticcast, dynamiccast, const_cast探讨 首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情...

智勇
2014/10/13
0
0
【转载】When should static_cast, dynamic_cast and reinterpret_cast be used?

这是我偶然在 http://stackoverflow.com/questions/ 网页上发现的一个问题(类似博客园的博问),问题主要是关于询问应该怎样使用,以及何时使用C++里面的这几种类型转换操作符:staticcase,...

hoodlum1980
2009/05/11
0
0
C++的强制类型转换

c/c++强制类型转换 Q:什么是C风格转换?什么是staticcast, dynamiccast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量...

ucliaohh
2016/10/26
2
0
static_cast reinterpret_cast

标准C++的类型转换符:staticcast、dynamiccast、reinterpretcast和 constcast(转载) C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Fun...

nkbai
2009/08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
34分钟前
1
0
聊聊storm trident batch的分流与聚合

序 本文主要研究一下storm trident batch的分流与聚合 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout) .p......

go4it
昨天
3
0
3分钟总结Mybatis别名

1.系统内置别名: 把类型全小写(resultType/paramType) 2.给某个类起别名 2.1 alias=”自定义” <typeAliases> <typeAlias type="com.bjsxt.pojo.People" alias="peo"/> </typeAli......

KingFightingAn
昨天
2
0
JAVA设计模式之模板方法模式和建造者模式

一、前期回顾 上一篇《Java 设计模式之工厂方法模式与抽象工厂模式》介绍了三种工厂模式,分别是工厂方法模式,简单工厂方法模式,抽象工厂模式,文中详细根据实际场景介绍了三种模式的定义,...

木木匠
昨天
8
0
C中的宏的使用(宏嵌套/宏展开/可变参数宏)

基本原则: 在展开当前宏函数时,如果形参有#或##则不进行宏参数的展开,否则先展开宏参数,再展开当前宏。 #是在定义两边加上双引号 #define _TOSTR(s) #sprintf(_TOSTR(test ABC))pr...

SamXIAO
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部