C++入门⑤:运算符以及类型转换

    xiaoxiao2021-03-25  102

    运算符

    各个语言的运算符意义都大同小异,这里只简单的学习一下运算符的重载:

    运算符重载指的是相同的符号进行多种操作,比如>>左移运算符表示将数左移若干位,但是在cin中,它被重载为输入标志。同样的还有各种算术运算符,根据运算数的类型的不同,被分别重载为int运算,double运算等。

    类型转换

    由于c++的数据类型众多,在实际编码的过程中总会遇到类型转换方面的问题。c++中的类型转换共有6种形式:

    1. 初始化与赋值转换

    诸如此类:int i = (int)5.5;,这也是在c与java种常见的,但是这样做有三个问题:

    将长度较长的整形赋值给长度较短的整形(eg:long→short)的时候,只取从小数若干位,直到填充该变量为止。将高精度浮点数赋值给低精度浮点数(eg:double→float)的时候会丢失精度,同时有可能会出现转换后的数值大于类型上限,此时会导致转换的结果不定。将浮点数赋值给整型的时候同样会丢失精度,也有可能会出现转换后的数值大于类型上限,此时会导致转换的结果不定。

    2. 用{}方式转换数据

    在c++11中添加了使用{}来进行类型转换,诸如int i {5.5},这种转换方式相比上一种方法要更为严格,具体体现在不允许将多位的值传递给少位(即long类型的数据无法转换为short类型,不论long类型的数据初值是多少)

    3. 表达式中转换

    在表达式中(诸如a = b + c;),数据类型的转换是根据c++的校验表转换的,具体规则如下: (转换优先级从高到低)

    如果有一个操作数的类型为long double,则将所有的操作数转换为long double;否则,如果有一个早操作数的类型为double,则将所有的操作数转换为double;否则,如果有一个早操作数的类型为float,则将所有的操作数转换为float;否则,说明所有操作数都是整形,进行整型提升;如果两个操作数都是有符号或者无符号的,且有级别高低之分(长度不同),则将所有操作数转换为级别最高的类型;若有符号数与无符号数共存,且无符号数级别高于有符号数,则将所有操作数转换为该无符号操作数的类型;否则,如果有符号类型可以表示无符号类型的所有可能值,则将无符号操作数转换为有符号操作数所属的类型;否则,将两个操作数都转换为有符号类型的无符号版本。

    简单来说,就是long double > double > float > unsigned long long > long long > unsigned long > long >unsigned int > int >unsigned short > short > unsigned char > char 如有错误,烦请指正。

    4. 传递参数时的转换

    这个主要在第七章中讲到,传递参数时的转换是由c++函数原型控制。

    5. 强制转换

    c标准为:(int) 7.5 c++ 标准为:int (7.5) c++标准如此是为了使其代码风格与函数调用统一。

    c++还引入了四个强制转换符,将在第十五章介绍。

    6.auto声明

    根据所赋初值的类型确定变量的类型,比如auto i = 5,将对i赋予int类型;auto i = 5.5,将对i赋予double类型。

    auto的使用远非这么简单,将会在后续的学习中逐步深入。

    本章(第四章)的章末习题过于简单,略过

    转载请注明原文地址: https://ju.6miu.com/read-13333.html

    最新回复(0)