读书人

强制类型转换解决方法

发布时间: 2012-05-12 15:39:31 作者: rapoo

强制类型转换
这两句代码的结果相同吗?
第二种写法编译有警告:warning C4244: '=' : conversion from 'double' to 'int', possible loss of data

int iH = (int)(rtDest.bottom - rtDest.top)/iRows;
int iH = (double)(rtDest.bottom - rtDest.top)/iRows;

这种强制类型转换,怎么样才能不报警告呢?

[解决办法]
多数情况下结果是一样的,碰到浮点舍入时会有出现差别的可能。

第二个写成:int iH = (int)((double)(rtDest.bottom - rtDest.top)/iRows);试试看
[解决办法]
一般平台上,int和double大小是不一样的。比如windows 32的int是4字节,double是8字节,那么你进行类型转换的话,肯定会丢失某些东西的。
你可以使用:int iH = (int)((double)(rtDest.bottom - rtDest.top)/iRows);来进行申明是自己要求强制类型转换的,那么编译器就进行转换而不通知你了。如果没有(int)的话,编译器认为你忘记了类型是不一样的呢。所以要通知你下。
[解决办法]
#pragma warning( disable:4244)
----------------------
http://topic.csdn.net/u/20120507/12/5ac3a8af-5b2c-473d-9865-bbd5b48e6506.html?33091

读书人网 >PB

热点推荐