我必须这样做吗?
回答
在这种情况下,bitmapSize.width
的类型为CGFloat
(iPhone上的当前为float
)。
从float
转换为size_t
有未定义的行为(根据C标准 - 不知道苹果是否提供任何进一步的保证)如果转换的值不适合一个size_t
。当它适合时,转换会丢失小数部分。转换是隐式还是显式都没有区别。
在代码中显示转换发生,因此读取代码的程序员不会忘记,这个转换是“好的”。从某种意义上说,它是“坏”的,它可能会压制编译器会给你的任何警告,说明这种转换是危险的。
因此,如果您绝对有信心转换将始终有效,那么您需要投射(以抑制警告)。如果你没有信心,那么你不需要演员(你可能应该避免转换或者自信)。
在这种情况下,就尺寸而言,转换似乎是安全的。假设你的CGSize对象代表了一个实际的UI元素的大小,它不会那么大。代码中的评论会很好,但是这是程序员在第五十次之后停止评论的事情,并且开始认为它是“明显的”,当然图像宽度适合于size_t
。
还有一个问题是转换对分数是否安全。在什么情况下,如果有的话,大小是否分数?
C支持隐式转换,并且如果由于某种原因size_t不如CGSize精确,您也会收到警告。
您应该使用正确的类型,可能是CGFloat。 size_t是int'ish和不适当的。
取决于您使用的是什么。举一个例子,'CGBitmapContextCreate'为它的宽度参数使用'size_t'。 – 2010-09-23 17:04:32
通常不需要演员(有时是错误的)。 C
大部分时间都是“正确的事情”。
就你而言,演员阵容是不需要的(但没有错,只是多余的)。
你需要投
- 参数与printf当他们不转换规范
printf("%p\n", (void*)some_pointer)
- 参数匹配
is*()
(ISDIGIT,ISBLANK,...)和toupper()
和tolower()
if (isxdigit((unsigned char)ch)) { /* ... */ }
- (如果我还记得更多,我会在这里添加它们)
size_t
类型是为了完全不同的东西,你不应该将它用于这种目的。
其目的是表达内存中不同类型的大小。例如,sizeof(int)
的类型为size_t
,它返回int
类型的大小。
正如其他人所建议的那样,为该变量使用适当的类型。
- 1. 这样做时,我必须关闭文件句柄吗?
- 2. 我必须做StringIO.close()吗?
- 3. 我必须删除这些指针吗?
- 4. 我必须释放这个变量吗?
- 5. 我可以做这样的事吗?
- 6. 'while(doSome())'我可以这样做吗?
- 7. NSMutableArrays - 我可以这样做吗?
- 8. 阵列pictureboxes的(我这样做对吗?)
- 9. Linq to Sql:我这样做对吗?
- 10. 凭证 - 我可以这样做吗?
- 11. JavaScript和CSS - 我是这样做的吗?
- 12. 我必须使用BreezeController吗?
- 13. 我必须导入com.companyname.productname.R吗?
- 14. 我必须致电sendResponse吗?
- 15. 我必须关闭FileInputStream吗?
- 16. 我必须发布accessoryView吗?
- 17. 我必须打开ngx_http_access_module吗?
- 18. 我必须重置webclient吗?
- 19. 可以这样做吗?
- 20. 可以这样做吗?
- 21. Java可以这样做吗?
- 22. 可以jquery这样做吗?
- 23. 这个json必须工作吗?
- 24. 在这层做我必须代码的东西
- 25. binami lampp堆栈的htdocs在哪里?我必须做到吗?
- 26. 做重写功能时,我必须匹配参数/参数吗?
- 27. 我必须在哪里做Bundler设置?
- 28. iphone 5我必须做两个xib
- 29. 当我必须做setNeedDisplay或setNeedLayout?
- 30. 我必须保存()我的NSManagedObjectContext吗?
其实,它是一个CGFloat。在iphone上,这意味着itr目前是* float,但是苹果可能会选择在以后使用它(他们已经在Mac OS X运行时改变了它)。)。 – JeremyP 2010-09-23 12:47:23
@JeremyP:够公平的。 – 2010-09-23 13:58:08
我想我只是使用CGFloat代替。这样做的目标是得到一个没有小数位的整数。 – openfrog 2010-09-23 15:02:15