四种Cast
来源:互联网 发布:ios10越狱软件源 编辑:程序博客网 时间:2024/06/16 17:56
C++中的Cast
引言
在一次看More Effective C++中,有一节提到了《Prefer C++-Style Casts》。其中列举许多C++ Cast的一些好处,当然这些都是相对于C语言中的强制转换这类而言的。
所以首先来了解C++中的Cast。
一、Dynamic_Cast
我们从适用范围来了解这个操作。
(1)首先dynamic_cast能够应用于指针转换。
子类指针转换成父类指针,成功;
父类指针转换成子类指针,就分为两种情况:
<a>父类指针p如果真的指向子类对象,那么转换时成功的;
<b>反之,失败,dynamic_cast返回NULL。
(2)其次dynamic_cast能够应用与引用之间的转换(与指针类似)。
子类引用转换成父类引用,成功;
父类引用转换成子类引用,就分为两种情况:
<a>父类引用ob,如果真的指向子类对象,那么转换时成功的;
<b>反之,失败,dynamic_cast,会抛出bad_cast异常
(3)其他将null指针,转换成任何类型的指针;将任何类型的指针转换成void*类型的指针。
参考代码:
二、Static_Cast
Static_cast可以转换相关联的类,可以从子类转换成父类。也能从父类转向子类,但是如果转换的父类指针(或者父类引用)所指向的对象是完整的,那么是没有问题;但是如果所指向的对象并不完整,那么会出现runtime错误。
Static_cast相对于dynamic_cast而言,除了能转换指针和引用,还能应用于任何能够隐式转换的情况。比如下面的情况。
三、Reinterpret_Cast
reinterpret_cast和上面讲到的两个cast,适用范围更加广泛。它可以适用于任何类型指针之间的转换。
该操作不会去进行动态类型或者静态类型的检测,它仅仅将值强行赋值过去。从某种意义上对编译器进行了一种欺骗,同时也带来了一定的不安全性。所以在使用这个cast的时候,要慎重。下面是这个操作的适用情况:
(1) Int和指针之间的相互转换;
(2) 无关联类指针之间的转换;
(3) 函数指针之间的转换
下面是这个操作的使用实例:
结果:
四、Const_Cast
const_cast如它的名字,它是去除修饰在对象上的const和volatile。
- C++四种cast
- 四种Cast
- C++的四种cast
- C++中的四种cast
- C++四种cast操作符
- C++中的四种cast转换
- 四种cast和typeid的用法
- C++四种cast操作符
- C++四种cast操作符
- C++四种cast操作符
- C++四种cast操作符
- C++四种cast操作符
- C++四种cast操作符
- C++四种cast操作符
- C++四种cast操作符
- C++四种cast操作符
- C++四种cast操作符
- C++四种cast操作符
- C++之setjmp和longjmp不能处理C++的异常(8)---《More Effective C++》
- 5分模块开发与实现
- jniLibs
- mysql 中时间日期格式datetime和timestamp比较 以及date_format函数
- AdversarialNetsPapers
- 四种Cast
- Redis集合(set)的命令操作
- Unity入门操作_PlayerPrefs存储_037
- 如何取消eclipse中编辑窗口上方的导航条
- Spring加载properties文件的两种方式
- mysql:bigint
- maven包大全 deeplearning4j
- 哈希表:Hash table
- struct和typedef struct