新型的类型转换

c方式的强制类型转换

(Type)(Expression)

Type(Expression)

 

c方式强制类型转换存在的问题

过于粗暴

  任意类型之间都可以进行转换,编译器很难判断其正确性

难于定位

  在源码中无法快速定位所有使用强制类型转换的语句

 

问题:

强制类型转换在实际工程中是很难完全避免的!

如何进行更加安全可靠的转换?

 

新式类型转换

c++将强制类型转换分为4种不同的类型

static_cast const_cast dynamic_cast reinterpret_cast

用法:xxx_cast<Type>(Expression)

 

static_cast强制类型转换

  用于基本类型间的转换

  不能用于基本类型指针间的转换

  用于有继承关系类对象之间的转换和类指针之间的转换

const_cast强制类型转换

  用于去除变量的只读属性

  强制转换的目标类型必须是指针或引用

dynamic_cast强制类型转换

  用于有继承关系的类指针间的转换

  用于有交叉关系的类指针间的转换

  具有类型检查的功能

  需要虚函数的支持

reinterpret_cast强制类型转换

  用于指针类型间的强制转换

  用于整数和指针类型间的强制转换

 

小结

c方式的强制类型转换

  过于粗暴

  潜在的问题不易被发现

  不易在代码中定位

新式类型转换以c++关键字的方式出现

  编译器能够帮助检查潜在的问题

  非常方便的在代码中定位

  支持动态类型识别(dynamic_cast)

posted @ 2018-05-20 15:15  sugarwill  阅读(142)  评论(0编辑  收藏  举报