操作数类型冲突: varbinary 与 float 不兼容_通读C++ primer plus— C++中的5种数据类型转换方式...

通读《C++ primer plus》—记录一

 C++中的5种数据类型转换方式

1、始化和赋值时转换

比如 
   inta=1;

longb=2147483647;

a=b;

上面的代码并不会有问题,。然而将a更改为float类型,将会出现错误。

需要注意的一种情况是:

把0赋值给bool类型变量,会被转换成False,非零的会被转换成True。

把字符串赋值给bool,是不可以。

但是反向可以,比如把False赋值给字符串变量,得到的是:"\u0000"

总之,尽量不要跨类型赋值,否则错误是很难避免的。

2、{}形式的转换

书中给的例子是:charc{66};

此行代码执行以后,C的数据是B。这个不难理解,在ASCII表中,十进制数据66,对应的正是字母B。

3a0cd4e207a3cbccbaae2f6b02e6cee9.png

但是如果我们给10000这样的数据,超出了表的范围,将会报错。

6128edd50fba28f79a1d20501897adb8.png

我们得到了一个关于字符串宽度的报错。

3、表达式中的转换

先看如下代码:
    shorta=100;
    shortb=200;
shortc=a+b;
表面上看,是short类型相加,得到了一个short类型的C,其实并不然。
编译器在实际加的过程中,要把其变成int类型相加,然后再转换成short类型。 至于它为什么要这样做,可以看一下C++11的校验表。 (1)  如果有一个操作数的类型是long double,则将另一个操作数转换为long double; (2)  否则,如果有一个操作数的类型是double,则将另一个操作数转换为double; (3)  否则,如果有一个操作数的类型是float,则将另一个操作数转换为float; (4)  否则,说明操作数都为整型,因此执行整型提升; (5)  在此情况下,如果两个操作数都是有符号或者无符号的,且其中一个操作数的级别比另一个低,则转换为级别高的类型; (6)  如果一个操作数为有符号的,另一个操作数为无符号的,且无符号的操作数比有符号的操作数高,则将有符号的类型转换为无符号操作数所属的类型; (7)  否则,如果有符号类型可表示无符号类型的所有可能取值,则将无符号操作数转换为有符号操作数所属的类型; (8)  否则,将两个操作数都转换为有符号类型的无符号版本。 读起来很绕,手打出来的时候也是懵懵的,但是仔细阅读不难发现,按照我们正常思维理解就行了,不一定背下来。

4、传递参数时候的转换

这个似乎没必要多说,比如把一个int类型的10,传递给一个函数,这个函数的接收类型是浮点型。和赋值转换并没有什么区别。

5、强制类型转换

两种转换方式:
(typename) value 这种是C语言的方式;
typename (value)这中是C++语言的方式。
 
如:
auto  a=int(1.23);
autob=(int)1.23;
我始终auto是为了表明我不确定是否转换成功,以此输出变量的类型.
P.S.:typeid(b).name()可以获取变量b的类型
此外,需要记住的是C++引入的四个强制转换运算符,非常重要。
书中此处只是讲述了static_cast,同样,也只写这个的用法。
static_cast  (value):把value转换为typename类型,如
    double  a=1.23;
     autob=static_cast<int>(a);
//编程软件为Qt,qDebug()可以用别的输出代替
    qDebug()<<a;
    qDebug()<<b;
     qDebug()<<typeid(b).name();

输出依次是1.23、1、i

说明成功把1.23转换成了int类型。

而且软件也提醒我们转换过程丢失了精度。

b8b681bc31e7770c8d8498000fdb8718.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值