Konvertierungsfehler mit length()



  • Wenn ich mit strg.length() einem Integer die Länge des Stringszuweisen möchte, nörgelt der Compiler über die Konvertierung.

    int laenge = strg.length()
    

    Da meint der Compiler runden zu müssen, wieso?



  • weil length() einen size_t zurückliefert - es ist zwar nicht genau festgelegt, welche int-Variante sich dahinter verbirgt, aber auf jeden Fall eine der unsigned (vermutlich 'unsigned int' oder 'unsigned long').



  • Genau genommen liefert length std::string::size_type.



  • Keydo schrieb:

    ...
    Da meint der Compiler runden zu müssen, wieso?

    hmmm, also "runden" glaube ich ja nicht 😉
    Der Compiler dürfte sich eher an einem möglichen "Überlauf" stoßen. Das kann passieren, wenn man eine "zu große Zahl" in eine Variable packen möchte. Das kann auch passieren, wenn man aus einer Variablen in eine solche anderem Wertebereich zuweist (z.B. long -> short).
    Im vorliegenden Fall kann das vllt. wirklich daran liegen, dass size_t unsigned ist (bestimmt), int aber signed ... und selbst ein unsigned int hat halt ein Bit mehr für die Wertdarstellung (positiver Zahlen) als ein signed int.

    Gruß,

    Simon2.


Anmelden zum Antworten