size_t pixelsWidth = (size_t)bitmapSize.width;
或者不转换为 size_t 完全没问题? bitmapSize 是 CGSize 类型...
最佳答案
在这种情况下,bitmapSize.width
的类型是 CGFloat
(目前 iPhone 上的 float
)。
如果转换的值不适合 float
,则从 size_t
转换为 size_t
具有未定义的行为(根据 C 标准 - 不确定 Apple 是否提供任何进一步的保证)。当它适合时,转换会丢失小数部分。转换是隐式还是显式没有区别。
转换是“好”的,因为它在代码中表明发生了转换,因此阅读代码的程序员不会忘记。它是“坏的”,因为它可能会抑制编译器会给您的任何警告,即这种转换是危险的。
因此,如果您绝对确信转换将始终有效,那么您需要强制转换(以抑制警告)。如果您不自信,那么您不想要类型转换(您可能应该避免转换或变得自信)。
在这种情况下,就大小而言,转换似乎是安全的。假设您的 CGSize 对象表示实际 UI 元素的大小,它不会那么大。代码中的注释会很好,但这是程序员在第 50 次后停止注释的事情,并开始认为图像宽度当然适合 size_t
是“显而易见的”。
另一个问题是转换对于分数是否安全。在什么情况下,如果有的话,大小会是小数?
关于iphone - 我必须这样投吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3776873/