我必須這樣做嗎?
回答
在這種情況下,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