【c++】类型转换

来源:互联网 发布:pitstop汉化破解版mac 编辑:程序博客网 时间:2024/04/28 22:51

自动类型转换很重要,这有助于理解c++的工作细节

自动类型转换

①将一种算术类型的值赋值给另一种算术类型的变量时,c++对值进行转换

②表达式中包含不同的类型时,c++对值进行转换

③将参数传递给函数时,c++将对值进行转换



初始化和赋值中的转换

c++中的基本类型都是可以相互自动转换的,我们称之为标准转换,但是由”小“转“大”是没有问题的,,但是放过来就有可能出现下面问题:

①将较大的浮点类型转换为较小的浮点类型,如double到float,精度降低,值坑能超出目标类型的取值范围,在这种情况下,结果将不正确

②浮点转换为整形,小数部分将会被截断

③较大整形转换为较小整形,原来的值可能超出目标类型的取值范围

⑤bool 和整型(0,1)会在c++编译器需要的时候相互转换

示例

#include<iostream>using std::cout;using std::endl;using std::ios_base;bool print(void );int main(){  cout.setf(ios_base::fixed,ios_base::floatfield);//定义输出方式 float tree=3;//转换成浮点数3.0 int guess(3.98E32);//会被截断,且不确定其值 int debt=7.2812;//7 cout<<"tree="<<tree<<endl; cout<<"guess="<<guess<<endl; cout<<"debt="<<debt<<endl; return 0;} 

输出结果

tree=3.000000
guess=2147483647

debt=7

表达式中的转换

分为两种

1、整型提升

bool,char,unsigned char  ,signed char,short,将会被转换为int。这种转换叫做整型提升(integer promotion)。

Tips:

c++的整型提升(自动转换)是保证数据不会丢失的。如short 比int短时,unsigned shor 转换为int,如果相同,unsigned shor会转换为unsigned int。同时wchar_t也会转会为容的下它的,int ,unsigned int,long,unsigned long。


2、不同类型之间的转换

(1)如果有一个操作数是long double,则将另一个操作数转换为 long double

(2)否则,如果有一个操作数是double,则将另一个操作数转换为 double

(3)否则,如果有一个操作数是float,则将另一个操作数转换为 float

(4)否则,说明操作数都是整型,因此执行整型提升

(4)这种情况下 如果凉饿操作数都是有符号或无符号,其中一个操作数的级别比另一个低,则转换为级别高的

(5)如果有一个操作数是有符号的,另一个操作数转换为 无符号,且无符号操作数的级别比有符号操作数高,则将有符号数转换为无符号操作数所属的类型

(6)否则,如果有符号数可以表示无符号数的所有取值则将无符号数转换为有符号操作数所属的类型

(7)否则,将两个操作数转换为有符号类型的无符号版本

上面的级别其实就是存储的容量的意思。总结一句化就是,如果另个操作数不一样,就帮小的哪个转换为大的哪个类型


传递参数时的类型转换

1基本类型






传递参数时的类型转换通常有c++的函数原型控制,然而也可以取消原型对参数传递的控制。尽管这样做并不明智。在这种情况下,c++将对char和short类型(signed和unsigned)应用整型提升。另外,为保持与传统c语言代码的兼容性。在将参数传递给取消原型对参数传递控制的函数时。c++将float参数提升为double。





强制类型转换

(typeName) value;//来自c

typeName(value);//c++ 看起来更像函数

上述两种形式都是可以的,除此之外c++还有下面四种类型转换

static_cast

const_cast

dynamic_cast

④reinterpret_cast

详情点击打开链接,或者自行百度。

0 0