这两句代码的结果相同吗?
第二种写法编译有警告: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