一 类型转换
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类型。与编译器的依赖比较大,程序不可移植。
中台网站开发公司页面设计
转载于:https://www.cnblogs.com/wangtianxj/archive/2009/07/27/1532209.html