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,则编译器会逐一的进行编译并产生相应的机器代码(产生四条代码).

最新文章

  1. CSS补充与JavaScript基础
  2. struts2学习记录
  3. Python~list,tuple^_^dict,set
  4. 【JavaScript】关于prototype
  5. hdu 1518 深搜
  6. html引入外部的jswenjian
  7. 0119——UITextField
  8. 【Python】iiacm_filemaker ——简易的.cpp文件创建即初始化脚本,ACMer专用
  9. BeautifulSoup抓取列表页锚文本
  10. 【Beta】 第三次Daily Scrum Meeting
  11. 【转载】uCOS系统的思考
  12. npm 安装 卸载 模块(转载)
  13. [转载]JVM 垃圾回收机制(Garbage Collection)
  14. 贝壳找房魔法师顾问[并查集+DAG判断]
  15. Codeforces Round #439 (Div. 2) A B C
  16. SQLAlchemy基本使用(Flask中)
  17. Tempdb--monitoring and troubleshooting
  18. linux meta 18.0.1 系统安装nodejs
  19. 程序设计入门-C语言基础知识-翁恺-第五周:函数-详细笔记(五)
  20. php、打印

热门文章

  1. linux系统硬件配置查看方法
  2. 埃拉托色尼筛法(Sieve of Eratosthenes)求素数。
  3. AnjularJS系列1 —— 样式相关的指令
  4. Web Map Gis 开发系列索引
  5. git误删文件找回方法/git版本回退方法
  6. Placeholder在IE8的兼容问题
  7. Find and delete duplicate files
  8. 手机通过数据线连接电脑后,找不到设备--Android Studio
  9. 使用axis开发web service服务端
  10. python多种格式数据加载、处理与存储