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?
Antwort
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.
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.
'int' war in der Nähe und musste 16-bit sein, während viele 8-bit-Plattformen noch im Einsatz waren. –
@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. –
@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. –
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.)
- 1. Gibt es einen Grund, System.Uri zu verwenden?
- 2. Gibt es einen Grund, `new object(). Foo()` nicht zu verwenden?
- 3. Gibt es einen wirklichen Grund, Optional.of() zu verwenden?
- 4. Gibt es einen Grund, Mausklick vs Tastatur zu verwenden?
- 5. Gibt es einen Grund, threading.Lock über Multiprocessing.Lock zu verwenden?
- 6. Gibt es einen Grund, "var" nicht aufzugeben?
- 7. Gibt es einen Grund, * & oder & * im C-Code zu verwenden?
- 8. Gibt es einen Grund, NSViewAnimation über CoreAnimation-Techniken zu verwenden?
- 9. Gibt es jemals einen Grund, ":: template" zu verwenden?
- 10. Gibt es einen Grund statt setPrototypeOf zu verwenden __proto__
- 11. Gibt es einen Grund, warum JavaScript-Entwickler Array.push() nicht verwenden?
- 12. Gibt es einen Grund, PHP's exec() nicht zu benutzen?
- 13. Gibt es einen Grund, Standardbibliotheksabhängigkeiten aufzulisten, wenn Sie setuptools verwenden?
- 14. Gibt es einen Grund, keine Aliase im Namensraum System zu verwenden?
- 15. Gibt es einen Grund, jQuery.Ajax zu asp.net UpdatePanel zu bevorzugen?
- 16. Gibt es einen Grund, das Zeichenfolgenmodul in Python zu importieren?
- 17. Gibt es einen Grund, warum wir Typen mit DataKinds nicht füllen können?
- 18. Gibt es einen Grund, den HTML 5-Doctype nicht zu verwenden?
- 19. Gibt es einen Grund, HTTP PUT und DELETE nicht in einer Webanwendung zu verwenden?
- 20. Gibt es einen Grund, den Strict-Modus in JavaScript nicht zu verwenden?
- 21. Gibt es einen Grund, .NET Framework-definierte Ausnahmeklassen in Ihrem eigenen Code NICHT zu verwenden?
- 22. Gibt es einen Grund, bcrypt nicht für E-Mail-Adressen zu verwenden?
- 23. Gibt es einen Grund, keinen einzelnen nicht verschachtelten Klassennamen als CSS-Selektor zu verwenden?
- 24. Gibt es einen Grund,/usr/bin/env python2/python3 nicht explizit zu verwenden?
- 25. Gibt es einen Grund, "wenn nicht ***" zu verwenden? Filter(). Exists(): ***. Create() "anstelle von" ***. Get_or_create() "?
- 26. Gibt es einen Grund, keine statischen Klassenmethoden für einen Service in Winkel 2 zu verwenden?
- 27. Gibt es einen Grund, einen Git-Alias anstelle eines git- * Skripts zu verwenden?
- 28. Gibt es einen berechtigten Grund, new und einen Konstruktor für eine Zahlenklasse in Java zu verwenden?
- 29. Gibt es einen guten Grund für Javascript inline zu sein
- 30. Gibt es einen Grund, eine Singleton-Bean zu proxysen?
auf Ihrem PC nicht. Auf einigen Plattformen, die nicht einmal int32_t bereitstellen (es ist optional) ... –
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. –