深度探索C++对象模型笔记 —— 第七章

  1. Point< float >* ptr=0;
    程序中什么都没发生,因为一个指向class object的指针,本身并不是一个class object,编译器不需要知道与该class有关的任何members的数据或object布局数据,所以将一个“Point的一个float实例”实例化也就没有必要了
    如果是引用呢,假设const Point< float >&ref = 0; 它真的会实例化一个“Point的float实例”,因为reference并不是无物的代名词,0被视为整数,必须被转化为以下类型的一个对象:Point< float >,如果没有转换的可能,这个定义就是错的,将会在编译时被挑出来
  2. dynamic_cast运算符可以在执行期决定真正的类型,如果downcast时安全的(也就是说base type pointer指向一个derived class object),这个运算符会传回被适当转换过的指针,如果downcast不是安全的,这个运算符返回0
  3. virtual table的第一个slot内含type_info object的地址:此type_info object与指针所指的class type有关
  4. 对于dynamic_cast,一个reference不可以像指针那样“把自己设为0便代表了no object”,若将一个reference设为0,会引起一个临时性对象(拥有被参考到的类型)被产生出来,该临时对象的初值为0,这个reference然后被设定为该临时对象的一个别名。因此当dynamic_cast作用于reference时,不能提供像指针一样的true或false,取而代之的是:
    如果reference真正参考到适当的derived class,downcast会被执行而程序可以继续执行
    如果reference不是真正某一种derived class,会抛出一个bad_cast_exception
  5. typeid运算符传回一个const reference,类型为type_info
  6. typeid也适用与内置类型,typeid(double)…;会传回一个const type_info&,与使用多态类型的差异在于这时候的type_info object是静态取得,而不是执行期取得
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值