Vor long
nicht allzu langer Zeit hat mir jemand gesagt, dass es auf 64-Bit-Computern keine 64-Bit-Computer gibt, die ich immer verwenden sollte int
. Das ergab für mich keinen Sinn. Ich habe gesehen, dass Dokumente (wie die auf Apples offizieller Website) sagen, dass sie long
beim Kompilieren für eine 64-Bit-CPU tatsächlich 64 Bit sind. Ich habe nachgeschlagen, was es unter 64-Bit-Windows war, und festgestellt
- Windows:
long
undint
bleiben 32 Bit lang, und spezielle neue Datentypen werden für 64-Bit-Ganzzahlen definiert.
(von http://www.intel.com/cd/ids/developer/asmo-na/eng/197664.htm?page=2 )
Was soll ich verwenden? Soll ich so etwas wie definieren uw
, sw
((un) unterzeichnet Breite) als long
wenn sie nicht auf Windows, und ansonsten eine Überprüfung der Ziel - CPU Bitbreite tun?
sizeof(long) == 8
sogar unter Windows :-)
size_t
oder einen Iteratortyp, um zu iterieren, nicht int
oderint64_t
size_t
es in der Nähe von negativen Zahlen schwierig wird, weil size_t
es nicht signiert ist. Also for(size_t i=0; i<v.size()-2; i++)
schlägt für Vektorgröße 0 und 1 fehl. Ein weiteres Beispiel : for(size_t i=v.size()-1; i>=0; i--)
.
size_t
Werten, sollte das Ergebnis in einer Variablen vom ptrdiff_t
Typ