2017-01-30 16 views
2

Ich bin neu in C++. Ich lernte über Typen, ihre Speicher verwendet und die Unterschiede in ihrer Speichergröße basierend auf Architektur. Gibt es Nachteile bei der Verwendung von Typen mit fester Breite wie int32_t?Gibt es einen Grund, feste Typen nicht zu verwenden?

+0

auf Ihrem PC nicht. Auf einigen Plattformen, die nicht einmal int32_t bereitstellen (es ist optional) ... –

+2

Es geht um * Semantik *. Was sagst du zu den Leuten, die deinen Code lesen? Wenn Sie plain 'int' verwenden, dann sagen Sie, dass es eine generische Ganzzahl ist, nichts Besonderes. Wenn Sie 'size_t' verwenden, dann sagen Sie, dass es eine Größe irgendeiner Art ist. Wenn Sie 'int32_t' verwenden, dann sagen Sie, dass es sich um eine bestimmte Art von Integer-Daten handelt, die bestimmten Einschränkungen (Signedness und Größe) unterliegen müssen. –

Antwort

4

Der einzige wirkliche Nachteil könnte sein, wenn Sie wollen, dass Ihr Code zu einem System portierbar ist, das keinen 32-Bit-Integer-Typ hat. In der Praxis sind das ziemlich selten, aber sie sind da draußen.

C++ hat Zugriff auf die C99 (und neuer) Integer-Typen über cstdint, die Sie zu den int_leastN_t und int_fastN_t Typen zugreifen geben, die die meisten tragbaren Weg sein könnte, bestimmte Bitbreiten in den Code zu bekommen, sollten Sie wirklich passieren, um sich darum zu kümmern.

2

Die ursprüngliche Absicht des Typs int war, dass er die natürliche Größe der Architektur darstellt, auf der Sie ausgeführt wurden; Sie könnten davon ausgehen, dass alle Operationen für einen Integer-Typ so schnell wie möglich ausgeführt wurden.

Heutzutage ist das Bild komplizierter. Cache-Effekte oder die Optimierung von Vektorinstruktionen könnten die Verwendung eines Integer-Typs bevorzugen, der kleiner als die natürliche Größe ist.

Offensichtlich, wenn Ihr Algorithmus ein int von mindestens eine bestimmte Größe erfordert, sind Sie besser dran, es ausdrücklich zu sein.

+0

'int' war in der Nähe und musste 16-bit sein, während viele 8-bit-Plattformen noch im Einsatz waren. –

+0

@CarlNorum aber selbst diese Architekturen hatten in der Regel Anweisungen für die Arbeit mit 16-Bit "Int" - jeder wusste, dass 8 Bits für die Berechnung nutzlos war. –

+0

@MarkRansom Yay eine 8-Bit- oder 1-Byte-Ganzzahl; Ich kann schließlich bis zu 255 in dezimal oder 0xFF in hex zählen! Ich denke, dass mein 30-jähriger veralteter Rechner eine bessere Arbeit zählt als eine 8-Bit-Ganzzahl. –

0

z.

Raum zu sparen, int_least32_t

Um Zeit zu sparen, int_fast32_t

Aber in Wirklichkeit verwenden, ich persönlich long (mindestens 32-bit) und int (mindestens 16-Bit) von Zeit verwenden zu Zeit, einfach weil sie einfacher zu tippen sind.

(Außerdem int32_t ist optional, existieren nicht garantiert.)

Verwandte Themen