给女同学的祝福语:C 中的4种类型转换方式
来源:百度文库 编辑:偶看新闻 时间:2024/05/03 15:21:44
C++中的4种类型转换方式===========================================================作者: goodfunman(http://goodfunman.itpub.net)
发表于:2006.07.02 17:42
分类: C/C++
出处:http://goodfunman.itpub.net/post/15807/129658
---------------------------------------------------------------
C++中的4种类型转换方式
static_cast 静态的_cast
dynamic_cast 动态的_cast
reinterpret_cast 重新解释的 _cast
const_cast 常量的_cast
C++ 里最好杜绝使用 C 方式的强制转换, 换用以上 4 个.
我们通常用的是 static_cast
在一类东西都可以转, 但是不是一类的就不能转.
即, 语义上说不通的, 两个完全不同的数据类型 static_cast
是拒绝工作的.
比如你想把一个指针转成浮点数,
或者想把 class A * 转成 class B * , 但是 class A 和 class B
又没有任何关系. 等等....
static_cast 在通过编译后, 空间和时间效率实际等价于 C 方式强制转换.
都是编译时决定的.
dynamic_cast 类似 static_cast, 但是在一颗类继承树上转换时,
将利用 RTTI 在运行时检查. 我们一般用于 downcast
比如,
class A {};
class B : public A {};
A* a=new B();
这个时候, 可以用 dynamic_cast 做 downcast, 把 a 转成 B*.
和 static_cast 不同, dynamic_cast 会检查一下 a 到底是不是指向一个
B, (利用了 RTTI) 如果转不了, 将返回一个 NULL.
reinterpret_cast 就比 static_cast 更接近 C 的强制转换了.
它更进一步的, 实现一些看起来没关系的两种类型转换.
比如我习惯干的, 把一个 void * 转成 unsigned ;)
当然它比 static_cast 危险.
但是有 reinterpret_cast 干不了的,
比如你在一个 const 成员函数里企图修改一个非 mutable 的成员变量.
编译器会对你咆哮, "不许动, 那玩意是我 const 住的, 把你的爪子
收回去" 这个时候就要利用 const_cast 了, 呵呵.
const_cast 就是可以解除 const 限制的"神"的武器
但我认为, 这在很多情况下比 reinterpret_cast 更危险, 我还是老实做
人的好. 让编译器来捍卫我的代码的安全
发表于:2006.07.02 17:42
分类: C/C++
出处:http://goodfunman.itpub.net/post/15807/129658
---------------------------------------------------------------
C++中的4种类型转换方式
static_cast 静态的_cast
dynamic_cast 动态的_cast
reinterpret_cast 重新解释的 _cast
const_cast 常量的_cast
C++ 里最好杜绝使用 C 方式的强制转换, 换用以上 4 个.
我们通常用的是 static_cast
在一类东西都可以转, 但是不是一类的就不能转.
即, 语义上说不通的, 两个完全不同的数据类型 static_cast
是拒绝工作的.
比如你想把一个指针转成浮点数,
或者想把 class A * 转成 class B * , 但是 class A 和 class B
又没有任何关系. 等等....
static_cast 在通过编译后, 空间和时间效率实际等价于 C 方式强制转换.
都是编译时决定的.
dynamic_cast 类似 static_cast, 但是在一颗类继承树上转换时,
将利用 RTTI 在运行时检查. 我们一般用于 downcast
比如,
class A {};
class B : public A {};
A* a=new B();
这个时候, 可以用 dynamic_cast 做 downcast, 把 a 转成 B*.
和 static_cast 不同, dynamic_cast 会检查一下 a 到底是不是指向一个
B, (利用了 RTTI) 如果转不了, 将返回一个 NULL.
reinterpret_cast 就比 static_cast 更接近 C 的强制转换了.
它更进一步的, 实现一些看起来没关系的两种类型转换.
比如我习惯干的, 把一个 void * 转成 unsigned ;)
当然它比 static_cast 危险.
但是有 reinterpret_cast 干不了的,
比如你在一个 const 成员函数里企图修改一个非 mutable 的成员变量.
编译器会对你咆哮, "不许动, 那玩意是我 const 住的, 把你的爪子
收回去" 这个时候就要利用 const_cast 了, 呵呵.
const_cast 就是可以解除 const 限制的"神"的武器
但我认为, 这在很多情况下比 reinterpret_cast 更危险, 我还是老实做
人的好. 让编译器来捍卫我的代码的安全
C语言中的强制转换类型
关于C#中的隐式转换
数据通信同步方式种类
生产经营方式的种类
宣传方式及种类???
L/C有哪几种类型之分?
影视作品中的同时句两种类型
visual basic中的记录集有哪几种类型
通信系统中调制方式有哪三种类型?
投资黄金的种类方式
网络传输方式的种类
关于c语言中的类型转换,谢谢了啊!!!
CoreIDRAW中交互式透明工具中的透明效果主要包括哪4种类型?
c语言中拿两种类型的数据可以通用
什么是向上类型转换(upcast)? 什么是向下类型转换(downcast)?哪种类型转换总是安全和成功的?
视频文件的转换方式
Dreamweaver中的哪几种类型的CSS样式表
操作系统按使用方式和用户界面形式分为哪几种类型?
按设备的使用方式可以将分为两种类型,它们分别是什么
按设备的使用方式可以将分为两种类型,它们分别是什么
操作系统按设备的使用方式可以将分为两种类型,它们分别是什么
关于通讯方式的种类和分类
求荨麻症治疗方式,种类很多
请问课堂教学方式有多少种类呢?