size_t pixelsWidth = (size_t)bitmapSize.width;
或者在没有施放尺寸的情况下完全没问题? bitmapSize的类型为CGSize ...
答案 0 :(得分:4)
你应该使用正确的类型,这可能是CGFloat。 size_t是一种不合适的东西。
答案 1 :(得分:3)
在这种情况下,bitmapSize.width
的类型为CGFloat
(目前在iPhone上为float
。)
从float
转换为size_t
具有未定义的行为(根据C标准 - 如果转换的值不适合size_t
,则不确定Apple是否提供任何进一步的保证) 。当它适合时,转换失去了小数部分。转换是隐式转换还是显式转换没有区别。
演员表示“好”,因为它在代码中显示转换发生,因此读取代码的程序员不会忘记。从某种意义上讲,它可能会抑制编译器会给你的这种转换带来危险的任何警告。“
因此,如果您完全确信转换将始终有效,那么您需要转换(禁止警告)。如果你没有信心,那么你不想要演员(你可能要么避免转换,要么自信)。
在这种情况下,就尺寸而言,转换似乎是安全的。假设您的CGSize对象表示实际UI元素的大小,它将不会那么大。代码中的注释会很好,但这是程序员在第五十次之后停止评论的事情,并且开始认为它“显而易见”当然图像宽度适合size_t
。
另一个问题是转换是否对分数是安全的。在什么情况下,如果有的话,大小是否会是分数?
答案 2 :(得分:2)
C支持隐式转换,如果size_t由于某种原因不如CGSize精确,你也会收到警告。
答案 3 :(得分:1)
通常不需要演员(有时候是错的)。
C
大部分时间做“正确的事”。
在你的情况下,不需要演员表(但没有错,只是多余的)。
你需要施放
printf("%p\n", (void*)some_pointer)
is*()
(isdigit,isblank,...)和toupper()
以及tolower()
的参数if (isxdigit((unsigned char)ch)) { /* ... */ }
答案 4 :(得分:1)
size_t
类型用于完全不同的类型,您不应将其用于此类用途
其目的是在内存中表达不同类型的大小。例如,sizeof(int)
的类型为size_t
,并返回int
类型的大小。
正如其他人所建议的那样,为该变量使用适当的类型。