std::size_t == unsigned int, jedoch trotzdem warnung
-
hola leute
bei folgendem code
std::string str; ... unsigned int t_len = str.length();bekomme ich (unter Win-XP, VS 2005) folgende meldung:
warning C4267: 'Initialisierung': Konvertierung von 'size_t' nach 'unsigned int', Datenverlust möglichsize_t is jedoch
typedef unsigned int size_t;weiß der compiler da nicht das es der selbe datentyp ist oder ist das ein bug ?
Meep Meep
-
size_t muss nicht unsigned int sein, sonst bräuchte man das typedef ja nicht.
Deswegen warnt dich der Compiler, außerdem ist das eine Level4 Warnung.
-
lolz schrieb:
size_t muss nicht unsigned int sein, sonst bräuchte man das typedef ja nicht.
Deswegen warnt dich der Compiler, außerdem ist das eine Level4 Warnung.VS 2005 zeigt mir aber an das size_t ein typedef unsigned int ist.
die hilfe sagt uebrigens das es eine level 3 ist.
Meep Meep
-
Die Warnung ist eine Folge von /Wp64
size_t ist bei vc2005 für win32 ein typedef für _W64 unsigned int
und für win64 ein typedef für unsigned __int64
-
Meep Meep schrieb:
lolz schrieb:
size_t muss nicht unsigned int sein, sonst bräuchte man das typedef ja nicht.
Deswegen warnt dich der Compiler, außerdem ist das eine Level4 Warnung.VS 2005 zeigt mir aber an das size_t ein typedef unsigned int ist.
Wie oben bereits gesagt muss size_t kein typedef für unsigned int sein und deswegen weißt dich der Compiler mit einer Warnung auf die implizite Typumwandlung hin.
-
re
hab jetzt Wp64 deaktiviert und es passt wieder.
aber verstehen tu ich das nicht so ganz.
ist der Wp64 schalter fuer win64 kompatibilitaet ?
fuer win64 gibts doch 64 bit kompiler. wofuer soll das gut sein?
kann mich da jemand aufklaeren ?Meep Meep
-
Wenn du als 64Bit Version kompilieren würdest, dann wäre unsigned int immernoch 32Bit groß, aber size_t 64Bit. Deswegen weißt er dich darauf hin, dass es einen Datenverlust geben kann.
Außerdem steht nirgends wie groß size_t sein muss, deswegen solltest du sowieso size_t benutzen, statt unsigned int.Edit:
Du solltest deher as Problem Beheben, statt die Warnungen zu deaktivieren.
Wenn du unbedingt unsigned int nehmen willst, dann pack den size_t in einen static_cast. Besser du benutzt einfach size_t statt unsigned int.