Heim > Backend-Entwicklung > C++ > Warum ist „size_t' in C/C nicht signiert: eine historische Notwendigkeit oder ein moderner Insektenmagnet?

Warum ist „size_t' in C/C nicht signiert: eine historische Notwendigkeit oder ein moderner Insektenmagnet?

Barbara Streisand
Freigeben: 2024-10-29 07:39:30
Original
288 Leute haben es durchsucht

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

Warum ist size_t vorzeichenlos?

Bjarne Stroustrups Beobachtung, dass „die Verwendung von vorzeichenlos anstelle eines int, um ein weiteres Bit zur Darstellung positiver Ganzzahlen zu gewinnen, fast nie eine gute Idee ist“ hat Bedenken hinsichtlich der Entscheidung geäußert, size_t vorzeichenlos zu machen.

Historische Ursprünge

Ursprünglich wurde size_t vorzeichenlos gemacht, um Architekturen mit 16-Bit-Zeigern wie DOS-Systemen gerecht zu werden. Um Einschränkungen der String-Größe zu verhindern, schreibt der C-Standard vor, dass ptrdiff_t, das vorzeichenbehaftete Gegenstück von size_t, effektiv 17 Bit groß sein muss.

Aktuelle Relevanz

Während diese historischen Gründe möglicherweise immer noch in eingebetteten Systemen gelten, Bei der modernen 32-Bit- und 64-Bit-Programmierung ist dies weniger der Fall. In diesen Umgebungen bietet die Verwendung vorzeichenloser Typen für Zahlen keine praktischen Vorteile, und ihre Verwendung kann aufgrund impliziter C/C-Konvertierungsregeln zu potenziellen Fehlern führen (z. B. wenn string("Hi").length() < -3) .

Fazit

Die Entscheidung, size_t unsigniert zu machen, war kein Fehler, sondern eher eine praktische Entscheidung für die begrenzten Systeme seiner Zeit. In modernen Programmierpraktiken ist es jedoch im Allgemeinen ratsam, die Verwendung vorzeichenloser Ganzzahlen in Schnittstellen und für Zahlen zu minimieren, außer in bestimmten Fällen, in denen die selbstbeschreibende Natur von typedef int MyType von Vorteil ist.

Das obige ist der detaillierte Inhalt vonWarum ist „size_t' in C/C nicht signiert: eine historische Notwendigkeit oder ein moderner Insektenmagnet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage