文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>RTTI和4个强制转换运算符

RTTI和4个强制转换运算符

时间:2010-11-25  来源:CR苏杭

与之对应的,就必然提供一个方法在运行时用来判断对象的具体类型,也就是RTTI,运行时类型标识符。 

 

typeid

#include <typeinfo>
typeid(object)

typeid(object)就是建立在RTTI之上的一个函数。它用来返回对象实际类型的信息,也就是一个type_info类对象的引用。

type_info类包含以下共有成员

bool opereator==(const type_info &ob);
bool opereator!=(const type_info &ob);
bool before(const type_info &ob);
const char *name();

typeid对多态类型才起作用。也就是类体系中,有virtual。 

从本质上说typeid是以RTTI为基础,没有virtual的类体系,在编译时即可确定类型,它们是不会被RTTI管辖的。

 

dynamic_cast

dynamic_cast<target-type> (expr)

dynamic_cast会判断expr能否被正确转换为target-type,也就是利用RTTI判断目标类型是不是expr的1)真实类型2)父类或3)祖..父类,是就强制转换。如果不是,就不转换,并抛出一个bad_cast。

 

const_cast

const_cast<type> (expr)

const_cast的意义根据语境有两个截然相反的两个

1)如果expr原先是const,则去除const;2)如果原先没有const,则加上const。

 

static_cast

也就是不执行类型检查的强制转换。可以看作跳过RTTI判断的dynamic_cast。效率提高。

在可以安全static_cast的地方不要dynamic_cast。但在不能保证安全处,一定要dynamic。

 

reinterpret_cast

啥也不管的在不相干的类型之间转化,例如指针转整数,或者不同类型的指针之间。 

 

 

相关阅读 更多 +
排行榜 更多 +
贪婪洞窟重生手游下载

贪婪洞窟重生手游下载

角色扮演 下载
jk漫画免费版下载头像是粉头新版本

jk漫画免费版下载头像是粉头新版本

浏览阅读 下载
哥布林弹球b服手游下载

哥布林弹球b服手游下载

休闲益智 下载