C++读书笔记之静态转换(static_cast)

C++读书笔记之静态转换(static_cast)

相对动态类型转换,静态类型转换则做范围更广的转换,但前提是必须是相关的类型,也就是说,编译器必须认为是可理解的,例如,一个非多态的类层次结构,祖孙对象的指针互易。如,研究生对象指针到学生对象指针的转换,或反之。由于void *到任何类型指针都可以进行想融性的转换,所以,void *到学生对象的指针转换也可以由static_cast来进行,还是从局部堆空间申请的空间转换为整形数组空间等。甚至有时候,要将void * 转到多态对象的指针,也要先经过static_cast过度一下。

        void fn(void * pd, void * pa) 

  {

Student s("John");

GraduateStudent gs("Smith");

Student * ps = static_cast<Student *> (&gs);

GraduateStudent * pgs = static_cast<GraduateStudent *> (ps);

Student * pp = static_cast<Student *> (pd);

Account * px = static_cast<Account *> (pa);

Saving * pSa = dynamic_cast<Saving *> (px);

int * p = static_cast<int *> (malloc(100));

}

假如Student类与GraduateStudent类无关,那么ps和pgs指针只能是NULL(#define NULL 0);假如pd不是指针,而因为pp是指针,所以pp的值也只能是NULL;假如pa不是指针,则px的值只能是NULL,而且连累到pSa的值也是NULL;这就是使用static_cast所带来的类型安全转换的检查帮助,比无根据地进行类型转换形式type(表达式)的"防盗性"要强,因为通过指针的非NULL判断,static_cast可以避免该转换后的操作失常。

static_cast转换并不是专门针对指针的,只要是相关类型的转换,都可以操作。无非它主要是针对确定的类型,而不是针对多态。关于多态的类型转换,由dynamic_cast去做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值