返回信息流刚看了C++的强制类型转换,想问下转换前后,底层做了哪些改变?
这是一条镜像帖。来源:北邮人论坛 / cpp / #78483同步于 2014/4/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
程序语言的类型在底层是怎么表示的?
zouxinlong
2014/4/17镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
C++风格的类型转化吗,楼主是指哪种const_cast static_cast dynamic_cast reinterpreter_cast
还是c风格的(int) x?
嗯,const_cast最好理解,就是去掉了const或者volatile属性
dynamic_cast的话,他是运行时转换,在运行时动态类型转换,执行类型安全检查,说穿了他要查询类的RTTI,然后判断可否进行转换,一般是基类和派生类间的转换,既然用到RTTI,那就得有虚函数表。
reinterpret_cast仅仅是按照bit重新解释类型,它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针。但既然是按照bit解释,那显然不能将非32bit的实例转成指针。
static_cast类似于类似于C风格的强制转换。有时他执行的是按照bit重新解释,比如把int转化为unsigned,有时是类型的提升,比如char转化为int,有时是运行时的调整,比如int 转为 double,或者把派生类指针转换为基类的。值得注意的是如果派生类多重继承自几个基类,当把其指针转换为第二基类指针时,编译器还会自动的加一个offset(需要先判断是否为null),而reinterpret_cast则不会这么做。
【 在 zouxinlong 的大作中提到: 】
: 刚看了C++的强制类型转换,想问下转换前后,底层做了哪些改变?
首先,膜拜一下大神,其实说的这些好多我都不太明白,如类的RTTI,按bit重新解释类型,offset,问一下你又没有推荐的C++书籍啊?我想抽点时间看看这些内容
这些东西太杂了,primer里有讲的
【 在 zouxinlong 的大作中提到: 】
: 首先,膜拜一下大神,其实说的这些好多我都不太明白,如类的RTTI,按bit重新解释类型,offset,问一下你又没有推荐的C++书籍啊?我想抽点时间看看这些内容