c++中4个与类型转换相关的关键字分析
static_cast
reinterpret_cast
dynamic_cast
const_cast
1.**static_cast------运算符完成相关类型之间的转换**
使用场景:如在同一类层次结构中的一个指针类型到另一个指针类型,整型到枚举类型,或者浮点型到整型等。
例: 1, int m=10;
double n=static_cast < int > m;
2, int * q=static_cast < int* >(malloc(100));
2.**reinterpret_cast------处理互不相关类型之间的转换**
使用场景:如从整型到指针,一种类型的指针到另一种类型的指针等
例: int a=10;
double* b=reinterpret_cast<double*>(a); //b的转换结果为0x0000000a
3.**dynamic_cast------处理基类型到派生类型的转换**(这个说法不是很准确,为了好理解先这么写)
使用场景:基类必须有虚函数,即为多态时,可以转换
例:
class Base { public: virtual int test(){return ;} //基类中存在虚函数,故在派生类中存在虚函数指针指向虚函数表。 }; class Derived:public Base { public: virtual int test(){return ;} }; int main() { Base cbase; Derived cderived; Base *p1=new Base; Base *p2=new Derived; Derived* pD1=dynamic_cast<Derived*>(p1);//p1没有真正指向派生类,pD1置为0 Derived* pD2=dynamic_cast<Derived*>(p2); //正确 //Derived& pd1=dynamic_cast<Derived&>(*p1);//p1没有真正指向派生类,pd1抛出异常 Derived& pd2=dynamic_cast<Derived&>(*p2);//正确 return ; }
4,const_cast用来移除变量的const或volatile限定符。
一句话:强制去掉const(或volatile) 必须使用const_cast 。
注:
volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.
简单地说就是防止编译器对代码进行优化.比如如下代码:
a=1;
a=2;
a=3;
a=4;
对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有a=4(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一的进行编译并产生相应的机器代码(产生四条代码).
最新文章
- C/C++面试题集锦(一)
- 漫谈c++11 Thread库之使写多线程程序
- d20161012
- HDU 1285 拓普排序 基本模板例题 确定比赛名次
- Codeforces 588E. A Simple Task (线段树+计数排序思想)
- Case Studies: Retail and Investment Banks Use of Social Media
- Flash学习初总结
- Notification和KVO有什么不同
- Unity NGUI 网络斗地主 -制作图集 Atlas
- FZYZ-2071 A Simple Math Problem IX
- github/python/ show me the code 25题(二)
- js中设置setInterval的注意点
- linux内核——进程,轻量级进程,线程,线程组
- SqlServer 汉字转换拼音首字母函数
- linq之延迟加载和即时加载+标准查询运算符
- python实现猜字游戏
- struts2常量配置
- 小米路由器Mesh,信号有多牛?
- vim for python
- TCP三次链接和四次断开
热门文章
- git 远程仓库
- Mac OS使用brew安装Nginx、MySQL、PHP-FPM的LAMP开发环境
- Linux可信计算机制模块详细分析之核心文件分析(8)tpm.c核心代码注释(中)
- Hibernate(Control)
- Nginx配置(全)
- MVC防止xss攻击 ——Html.AntiForgeryToken的AJAX提交
- Xcode 8 支持 iOS 7 真机解决过程记录
- Java基础——继承、接口
- Springsecurity3.1.3配置多个登陆页面
- C和指针 第十六章 标准函数库 本地跳转setjmp.h