《深度探索C++对象模型》读书笔记(7)
e of the template instantiation”来决 定name.
故此处的调用操作由“scope of the template definition”来决议 。 若是如下的函数调用: sr0.type_dependent(); 由于_member的类型与 template参数有关,故此处由“scope of the template instantiation”来决议。 ***Member Function的具现行为*** 以手动方式在个别的object module中完成预先具现 操作,是唯一有效率的办法。 ***执行期类型识别*** dynamic_cast运算符可以在执行期 决定真正的类型。如果downcast是安全的(也就是说,一个base type pointer指向一个derived class object),这个运算符会传回被适当转型过的指针;如果downcast不是安全的,这个运算符会传回 0.
什么是dynamic_cast的真正成本?pfct的一个类型描述器会被编 译器产生出来,由pt指向之class object类型描述器必须在执行期通过vptr取得。下面是可能的转换:
其中,type_info是C++ Standard所定义的类型描述器的class 名称,该class中放置着待索求的类型信息。virtual table的第一个slot内含type_info object的地址 ,此type_info object与pt所指之class type有关。 dynamic_cast运算符也适用于reference身 上,然而对于一个non-type-safe-cast,其结果不会与施行于指针的情况一样。一个reference不可以像 指针那样“把自己设为0便代表了no object”;若将一个reference设为0,会引起一个临时 性对象(拥有被参考到的类型)被产生出来,该临时对象的初值为0,这个reference然后被设定为该临 时变量的一个别名。 因而,如果reference并不真正是某一种derived class,那么可通过丢出一 个bad_cast exception进行处理:
当然,你也可以使用typeid运算符来达到同样的目的:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |