笔记五 类型转换

一 类型转换
int ival=0;
ival=3.541+3;
最终结果是,ival的值为6。小类型总是被提升成大类型,以防止类型丢失。
整数3被提升为double类型,该转化为编译器自动完成,无需程序员介入。因此,它们被称为隐式类型转换。

如果赋值操作符的左右两边的类型不同,那么,有可能的话,右边操作数会被转换成左边的类型。double向int的转换自动按截取而不是舍入进行,小数部分直接被抛弃。

1 隐式类型发生在下列这些典型的情况下:
a 在混合类型的算术表达式中。

b 用一种类型的表达式赋值给另一种类型的对象。

c 把一个表达式传递给一个函数调用,表达式的类型与形式参数的类型不同。
extern double sqrt(double);
sqrt(2);2被提升为double

d 从一个函数返回一个表达式,表达式的类型于返回类型不同。目标转换类型是函数的返回类型。
double difference(int ival1,int ival2)
{
    return ival1-ival2;
}

2 算术转换
两个通用的知道原则如下:
a 防止精度损失,如果必要,类型总是被提升为较宽的类型
b 所有含有小于整形的有序类型的算术表达式,在计算之前,其类型会被转换成整形。

3.14159L+'a';

如果操作数之一是long double,double,float,则另外一个数相应的也被提升为long double,double,float。

在进行整值提升时,类型char,signed char,unsigned char和short int都被提升为类型int。

显示强制转换:
pc=static_cast<char *> (pv);

cast_name<type> (expression)
cast_name:static_cast,const_cast,dynamic_cast,
reinterpret_cast 执行底级转换,比如可以将int*转换为int类型。与编译器的依赖比较大,程序不可移植。

你可能感兴趣的:(类型转换)