Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ist „size_t“ trotz der bekannten Nachteile ohne Vorzeichen?

Warum ist „size_t“ trotz der bekannten Nachteile ohne Vorzeichen?

Linda Hamilton
Linda HamiltonOriginal
2024-10-28 09:24:29520Durchsuche

Why is `size_t` Unsigned Despite the Known Drawbacks?

Warum ist size_t Unsigned?

Frage:

In seinem Buch rät Bjarne Stroustrup gegen die Verwendung vorzeichenloser Ganzzahlen, um ein zusätzliches Bit für die Darstellung positiver Ganzzahlen zu gewinnen. Allerdings ist size_t, ein Typ, der üblicherweise zur Darstellung von Array- und String-Größen verwendet wird, ohne Vorzeichen. War das ein Fehler und sollte die Verwendung von size_t minimiert werden?

Antwort:

size_t ist aus historischen Gründen nicht signiert:

Architektonische Einschränkungen:

Auf älteren Architekturen mit 16-Bit-Zeigern wäre eine Begrenzung der Zeichenfolgen auf 32 KB unpraktisch. Um dies zu beheben, erfordert der C-Standard, dass ptrdiff_t, das vorzeichenbehaftete Gegenstück zu size_t, einen effektiven Bereich von 17 Bits hat.

Eingebettete Systeme:

In bestimmten eingebetteten Programmierungen In Umgebungen gelten diese historischen Gründe immer noch.

Nachteile von vorzeichenlosen Typen:

In der modernen 32-Bit- und 64-Bit-Programmierung weisen vorzeichenlose Typen jedoch erhebliche Nachteile auf :

  • Implizite Konvertierungsregeln: Die impliziten Konvertierungsregeln von C und C behandeln vorzeichenlose Typen als Bug-Attractors, da sie Operationen und Vergleiche ermöglichen, die zu unerwarteten Ergebnissen führen können (z. B. string ("Hi").length() < -3).

Fazit:

Die Entscheidung, size_t unsigniert zu machen, war angesichts der architektonische Einschränkungen der Zeit. In der modernen Programmierpraxis wird jedoch aufgrund ihrer inhärenten Nachteile dringend davon abgeraten, vorzeichenlose Typen für numerische Operationen zu verwenden.

Das obige ist der detaillierte Inhalt vonWarum ist „size_t“ trotz der bekannten Nachteile ohne Vorzeichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn