size_type
-
Du kannst eigentlich auch
unsigned int
nehmen. Kennt jemand eine Implementierung, wo das nicht das Gleiche wiesize_t
ist?
-
@Nexus: ? unsigned int ist ja noch länger als size_t (zu tippen). Warum sollte man das machen? Ist es nicht auf einigen 64-bit Systemen so, dass int (also auch unsigned int) 32-bit groß ist, die Addressen aber 64-bit groß sind? Dann wäre das schon mal ein Beispiel, bei dem unsigned int zu klein sein kann. Mit size_t ist man auf relativ sicherer Seite.
Gruß
Don06
-
Stimmt schon, daran hab ich gar nicht mehr gedacht. War ein blöder Einwand von mir.
(Ich bezog mich eigentlich darauf:
Stromberg_ schrieb:
Den Rückgabewert von size() soll man doch nur in einer Variable des Typs "size_type" ablegen?
, aber eben zu Unrecht.)
-
Naja ... size_t ist ja nicht der Typ, in dem man Adressen speichern soll, sondern eben ein Größentyp.
-
Ja, aber in einem 64-bit Addressraum kann ein Byte-Array nunmal eine maximale Länge von 2^64 haben und diese Länge lässt sich dann hervorragend in 64-bit speichern.
-
Aber auf dem sichersten Weg ist man doch immer noch wenn man den dazugehörigen ::size_type verwendet?
MfG
Stromberg
-
Stromberg schrieb:
Aber auf dem sichersten Weg ist man doch immer noch wenn man den dazugehörigen ::size_type verwendet?
Japp, ist man - mach ich übrigens auch immer... hab bis jz auch noch niemals nen grund gehört, warum man das nicht sollte - das "argument" schreibaufwand find ich hier fehl am platz - und unübersichtlicher wird es dadurch auch nicht - ich finds eher (viel ^^) übersichtlicher... allerdings sehen meine meisten klassen auch so in etwa aus:
class X { public: typedef int ValueType; typedef std::vector <ValueType> ContainerType; /*...*/ }; void X::test() { ContainerType::size_type = /*...*/; }
also ist der nachteil von wegen "man muss zu viel ändern, wenn man nen anderen datentyp etc. nimmt" auch nicht mehr gegeben...
sind zwar ein paar zeichen mehr als size_t aber auch nicht so extrem viel mehr und tippen muss ich wegen IntelliSense ja eh kaum mehr als size_t - und ich habe auch noch keinen Programmierer gesehen, der nur nicht schneller programmieren konnte, weil er nicht schneller tippen konnte - iwie hing es dann doch immer am denken - und an den selbst eingebauten fehlern ^^
bb
-
Nexus schrieb:
Du kannst eigentlich auch
unsigned int
nehmen.Nein, kann man nicht! Das ist kein korrektes C++ Programm mehr. Der typedef von size_t hat schon seine Gründe.
Nexus schrieb:
Kennt jemand eine Implementierung, wo das nicht das Gleiche wie
size_t
ist?Ja, jedes UNIX ist entweder ILP32 oder LP64, damit ist im 64Bit Modus sizeof(int) == 4 und sizeof(size_t) == 8.
-
Nexus schrieb:
Du kannst eigentlich auch
unsigned int
nehmen. Kennt jemand eine Implementierung, wo das nicht das Gleiche wiesize_t
ist?warum kommen immer wieder leute auf die idee, andere datentypen nehen zu müssen, das bringt nix außer probleme.
-
[quote="wiesonur"]
Nexus schrieb:
Du kannst eigentlich auch
unsigned int
nehmen. Kennt jemand eine Implementierung, wo das nicht das Gleiche wiesize_t
ist?Nexus,
am besten du schlägst dein buch ma auf, da bekommst die antwort.frohe weihnachten an alle :xmas1:
-
Don06 hat die Sache klargestellt und ich habe meinen Fehler eingesehen. Ich weiss auch nicht, warum jetzt alle darauf rumreiten müssen...