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. C/C++面试题集锦(一)
  2. 漫谈c++11 Thread库之使写多线程程序
  3. d20161012
  4. HDU 1285 拓普排序 基本模板例题 确定比赛名次
  5. Codeforces 588E. A Simple Task (线段树+计数排序思想)
  6. Case Studies: Retail and Investment Banks Use of Social Media
  7. Flash学习初总结
  8. Notification和KVO有什么不同
  9. Unity NGUI 网络斗地主 -制作图集 Atlas
  10. FZYZ-2071 A Simple Math Problem IX
  11. github/python/ show me the code 25题(二)
  12. js中设置setInterval的注意点
  13. linux内核——进程,轻量级进程,线程,线程组
  14. SqlServer 汉字转换拼音首字母函数
  15. linq之延迟加载和即时加载+标准查询运算符
  16. python实现猜字游戏
  17. struts2常量配置
  18. 小米路由器Mesh,信号有多牛?
  19. vim for python
  20. TCP三次链接和四次断开

热门文章

  1. git 远程仓库
  2. Mac OS使用brew安装Nginx、MySQL、PHP-FPM的LAMP开发环境
  3. Linux可信计算机制模块详细分析之核心文件分析(8)tpm.c核心代码注释(中)
  4. Hibernate(Control)
  5. Nginx配置(全)
  6. MVC防止xss攻击 ——Html.AntiForgeryToken的AJAX提交
  7. Xcode 8 支持 iOS 7 真机解决过程记录
  8. Java基础——继承、接口
  9. Springsecurity3.1.3配置多个登陆页面
  10. C和指针 第十六章 标准函数库 本地跳转setjmp.h