В этом случае тип bitmapSize.width
равен CGFloat
(в настоящее время float
на iPhone).
Преобразование из float
в size_t
имеет неопределенное поведение (согласно стандарту C- не уверен, предоставляет ли Apple какие-либо дополнительные гарантии), если преобразованное значение не укладывается в size_t
.Когда это подходит, преобразование теряет дробную часть.Не имеет значения, является ли преобразование неявным или явным.
Приведение "хорошо" в том смысле, что в коде показано, что преобразование происходит, поэтому программисты, читающие код, не забудут,Это «плохо» в том смысле, что оно, вероятно, подавляет любые предупреждения, которые компилятор может дать вам, что это преобразование опасно.
Итак, если вы абсолютно уверены, что преобразование всегда будет работать, тогда вам нужен приведение(чтобы подавить предупреждение).Если вы не уверены, то вам не нужен актерский состав (и вам, вероятно, следует либо избегать преобразования, либо быть уверенным в себе).
В этом случае кажется вероятным, что преобразование безопасно, посколькуРазмер обеспокоен.Предполагая, что ваш объект CGSize представляет размер фактического элемента пользовательского интерфейса, он не будет таким уж большим.Комментировать в коде было бы неплохо, но программисты прекращают комментировать после пятидесятого раза и начинают думать, что это «очевидно», что, конечно, ширина изображения соответствует size_t
.
Еще один вопрос заключается в том, является ли преобразование безопасным в отношении фракций.При каких обстоятельствах, если таковые имеются, размер будет дробным?