C++ Primer 4.11 类型转换 知识点+练习题 第四章完结!!!

隐式转换

算数转换:要往宽度大的转 ,无论带不带符号

数组被转换为指针:多数情况数组名会被转换为数组首元素指针

                                例外:decltype(P105),&(P102待更新),sizeof(P140),typeid(P732)

指针转换

1.常量0和nullptr可以转换成任意指针(int*.double*,char*...)
  int *p=0;
  double *q=nullptr;
2.任意指向非常量的的指针能转换成void*
  主要用于函数形参(void * a,..)这样传任意类型指针,都能用void*接住
3.非空指针为true
4.转换成常量
  允许将指向非常量类型的指针或引用转换成指向相应的常量类型的指针或引用
  int i;
const int &j=i;
const int *p=i;//正确,非常量地址转换为常量
int &r=j,*q=p;//错误,可能通过r和q更改const,错误
与底层顶层const有时间整理

类类型定义转换:由编译器自动执行,每次只能执行一种,若同时可能被拒绝(P263) 

while(cin>>s)
cin>>s 读入后返回cin(&istream) 转换为true(读入成功),false(读入失败)

显式转换

1.static_cast

类中可用,书中还未讲到,先用于内置类型
告诉编译器我们并不在意精度损失
double s=static_cast<doubel>(j)/i;//把j转换为double

2.const_cast

主要用于函数重载,在这里使用没有太大意义
const char* pc;
char *p=const_cast<char*>(pc);将pc去const

const int a=10;
int b=const_cast<int>(a);//错!只能用于指针引用
int *pt=const_cast<int*> (a);
*pt=20;
此时再输出a仍为10,因为只改了a在内存中的值,输出时拿的是最开始放在cpu寄存器中的,涉及到编译器优化,,不怎么会,等会了整理一下

练习题

无特殊强调的 

待更新 

1.同之前待更新P102

2.底层顶层const

3.const编译器优化 

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值