Bjarne Stroustrup 的觀察結果是「使用 unsigned 而不是 int 來多獲得一位來表示正整數幾乎從來都不是一個好主意」引起了人們對將 size_t 設定為無符號的決定的擔憂。
最初,將 size_t 設為無符號是為了適應具有 16 位元指標的體系結構,例如 DOS 系統。為了防止字串大小限制,C 標準強制要求 ptrdiff_t(size_t 的有符號副本)實際上為 17 位元。
雖然這些歷史原因可能仍然適用於嵌入式系統,對於現代 32 位元和 64 位元程式設計來說,情況就不那麼重要了。在這些環境中,對數字使用無符號類型沒有實際優勢,並且由於C/C 隱式轉換規則(例如,其中string("Hi").length()
將size_t 設定為無符號的決定不是一個錯誤,而是針對當時有限系統的實際選擇。然而,在現代程式設計實踐中,通常建議盡量減少在介面和數字中使用無符號整數,除非 typedef int MyType 的自描述性是有益的特定情況。
以上是為什麼 C/C 中 `size_t` 是無符號的:歷史的必然性還是現代的 bug 磁鐵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!