首頁 >後端開發 >C++ >為什麼 C/C 中 `size_t` 是無符號的:歷史的必然性還是現代的 bug 磁鐵?

為什麼 C/C 中 `size_t` 是無符號的:歷史的必然性還是現代的 bug 磁鐵?

Barbara Streisand
Barbara Streisand原創
2024-10-29 07:39:30283瀏覽

 Why is `size_t` Unsigned in C/C  : A Historical Necessity or a Modern Bug Magnet?

為什麼 size_t 是無符號的?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn