100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 通读《C++ primer plus》— C++中的5种数据类型转换方式

通读《C++ primer plus》— C++中的5种数据类型转换方式

时间:2019-12-14 02:04:08

相关推荐

通读《C++ primer plus》— C++中的5种数据类型转换方式

通读《C++ primer plus》—记录一 C++中的5种数据类型转换方式1、始化和赋值时转换比如 int a=1; long b=2147483647; a=b; 上面的代码并不会有问题,。然而将a更改为float类型,将会出现错误。 需要注意的一种情况是: 把0赋值给bool类型变量,会被转换成False,非零的会被转换成True。 把字符串赋值给bool,是不可以。 但是反向可以,比如把False赋值给字符串变量,得到的是:"\u0000" 总之,尽量不要跨类型赋值,否则错误是很难避免的。2、{}形式的转换书中给的例子是:char c {66}; 此行代码执行以后,C的数据是B。这个不难理解,在ASCII表中,十进制数据66,对应的正是字母B。 但是如果我们给10000这样的数据,超出了表的范围,将会报错。 我们得到了一个关于字符串宽度的报错。3、表达式中的转换先看如下代码: short a=100; short b=200; short c=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); auto b=(int) 1.23; 我始终auto是为了表明我不确定是否转换成功,以此输出变量的类型. P.S.:typeid (b).name()可以获取变量b的类型 此外,需要记住的是C++引入的四个强制转换运算符,非常重要。 书中此处只是讲述了static_cast,同样,也只写这个的用法。 static_cast <typename> (value):把value转换为typename类型,如 double a=1.23; auto b= static_cast<int> (a); //编程软件为Qt,qDebug()可以用别的输出代替 qDebug()<<a; qDebug()<<b; qDebug()<<typeid (b).name(); 输出依次是1.23、1、i 说明成功把1.23转换成了int类型。 而且软件也提醒我们转换过程丢失了精度。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。