size_t und int / C++

Hallo Leute,

kennt sich jemand damit aus? Ich habe bisschen gegoogelt....es gab einige vorschläge zum casten, aber ich bin mir bei folgendem nicht sicher:

wenn size_t = 10 ist, bekommt der int wert nach dem cast auch wirklich die 10, oder was passiert da im hintergrund?
Falls ich es schneller rausfinden sollte als hier antworten gegeben werden, poste ich das natürlich hier :D

okay, so gemacht:
// sektorsize ist vom typen size_t
int count = static_cast<int>(sektorsize);
 
Zuletzt bearbeitet:
Bei einem solchen cast musst du vorsichtig mit möglichen Überläufen sein. Außerdem wirst du damit wohl bei 64 Bit Systemen Probleme bekommen.

Du könntest dir mal numeric_cast von boost anschauen.
 
ah danke,
dummerweise finde ich das include nicht oder das namespace (habe boost schon eingebaut), nen tipp? :D

einfach:

#include <boost/cast.hpp>

dann funtzt auch boost::numeric_cast

aber gut, so kann ich auch wenigsten exceptions fangen ;)
 
Zuletzt bearbeitet:
Hallo Leute,

kennt sich jemand damit aus? Ich habe bisschen gegoogelt....es gab einige vorschläge zum casten, aber ich bin mir bei folgendem nicht sicher:

wenn size_t = 10 ist, bekommt der int wert nach dem cast auch wirklich die 10, oder was passiert da im hintergrund?
Falls ich es schneller rausfinden sollte als hier antworten gegeben werden, poste ich das natürlich hier :D

okay, so gemacht:

size_t ist nichts anderes als ein unsigned int.
 
das was ich rausgefunden habe ist, das size_t nicht plattform unabhängig ist und zu problemen führen kann, aus diesem grund will ich programatisch "sicher" gehen.
(muss plattform unabhängige software bauen, bzw. der numerische hintergrund soll plattforum unabhängig bleiben.....und gewisse umstände führen dazu, das ich size_t benutzen muss.....)

wie auch immer.....
 
size_t ist nichts anderes als ein unsigned int.

Das trifft wohl auf die meisten 32 Bit Systeme zu, aber der Standard gibt das nicht vor.

The types used for size_t and ptrdiff_t should not have an integer conversion rank greater than that of signed long int unless the implementation supports objects large enough to make this necessary.
Its implementation-defined value shall be equal to or greater in magnitude (absolute value) than the corresponding value given below, with the same sign.
[...]
— limit of size_t
SIZE_MAX 65535
 
das was ich rausgefunden habe ist, das size_t nicht plattform unabhängig ist und zu problemen führen kann, aus diesem grund will ich programatisch "sicher" gehen.
(muss plattform unabhängige software bauen, bzw. der numerische hintergrund soll plattforum unabhängig bleiben.....und gewisse umstände führen dazu, das ich size_t benutzen muss.....)

wie auch immer.....

Das trifft wohl auf die meisten 32 Bit Systeme zu, aber der Standard gibt das nicht vor.

Nope, Standard ist das nicht, aber mir ist bisher nichts anderes unter gekommen.
Der Integer kann unterschiedlich gross sein. Je nach Plattform ist der Integer 2 bis 8 Byte gross.

Wenn du viel Wert auf Plattformunabhaengigkeit legst, schau dir mal stdint.h an Klick Mich.
 
Zurück
Oben