Was ist toll an size_t?



  • ...außer, dass ich doppelt solange benötige um es zu schreiben (ja für unsigned long int benötige ich nur halb so lange).
    ...außer, dass es nicht gehighlighted wird.
    ...außer, dass es derzeit in ist für jeden Standard-Datentyp 10 Typedefs und 3 Defines zu erstellen. Geht mir ja in der WinAPI schon so auf die Nerven.

    MfG SideWinder



  • BTW: In der WinAPI kann ich es ja noch verstehen, dass DWORD anstatt von unsigned long int verwendet wird -> manchmal muss der Typ genau 32bit haben - was tun wenn der nun plötzlich größer ist.

    Aber in der Standard-Libary ist sowas imho total fehl am Platz. Kann die Längenangabe des Strings ja auch ruhig 64bit haben...

    MfG SideWinder



  • Nichts daran ist toll, außer man legt Wert auf Portabilität... Und falls du es noch nicht bemerkt hast, ist size_t deutlich kürzer als unsigned long int 🙄 (Ich hoffe du schreibst nicht im Ernst unsigned long int?)



  • 1. Doch ich schreibe "unsigned long int" und nicht "unsigned long"
    2. Kürzer? Wie gesagt ich schreibe "unsigned long int" schneller als "sizeunterstricht"

    MfG SideWinder



  • Ob du schneller oder langsamer schreibst ist alleine dein Problem, es geht um Übersichtlichkeit.

    Ich finde folgendes schöner und vorallem lesbarer

    std::size_t a;
    std::size_t b;
    //unsigned c;
    

    als solche Konstrukte wie:

    unsigned long int a;
    unsigned int b;
    


  • Also ich persönlich finde es um einiges schlechter lesbar (eben uA auch wegen fehlendem Synthaxhighlightning).

    BTW: Ja, das mit den Doppelpunkten und spitzen Klammern kann man in C++ überhaupt sehr schön gestalten:

    ::std::vector<::std::basic_string<::std::wchar_t>::size_type> __u3b351ch7l1ch3r_c0d3_157_gu7 = ::std::basic_string<::std::wchar_t>::npos;
    

    MfG SideWinder



  • Moment mal, gibt es nicht sowas wie typedef? 😮
    Alleine wer solche Variablennamen wie "__u3b351ch7l1ch3r_c0d3_157_gu7" wählt, muss nicht ganz dicht im Kopf sein 😃 🙂



  • size_t ist portabel und stellt damit für jedes system den jeweilig grösten typ da, und wenn man einen portablen container mit size_t macht, brauch man nur einen typedef ändern,wenn man zb aber von unsigned int auf unsigned short wechseln muss,und kein size_t benutzt...dann wirds aufwendig



  • SideWinder schrieb:

    Aber in der Standard-Libary ist sowas imho total fehl am Platz. Kann die Längenangabe des Strings ja auch ruhig 64bit haben...

    Ich versteh diesen Einwand überhaupt nicht. Das ist doch gerade der Sinn von size_t, dass man ihn je nach Plattform so definiert, dass er passt. Wenn du eine Plattform hast, auf der du 64 Bit adressieren kannst, definierst du typedef als 64 Bit Typen.



  • BTW brauch ich für size_t nicht so lange wie für unsigned long int.



  • Ich hab das doch oft erklärt 🙂

    size_t muss nicht immer unsigned long sein, so gibt es mehr als nur 32Bit Systeme. Außerdem ist es IMHO verständlicher, wenn eine Variable vom Typ size_t ist, was damit gemacht werden soll.

    Und wie bereits erklärt kann man sich durch dieses hin und hergewurschtel mit den Typen (vorallem wenn dann noch jemand auf die Idee kommt int oder so für die Größe zu benutzen), schwer auffindbare Sicherheitslücken holen.

    Und bevor ich mir so einen unnötigen Stress mache, nehm ich doch einfach gleich size_t, aus dem Grund gibt es den Typ ja auch im Standard. Ich finde das eigentlich noch nichtmal diskussions würdig



  • und size_t wird doch gehighlighted :p



  • *test*

    size_t
    

    MfG SideWinder



  • ist eben kein Keyword, aber mit deiner Argumentation möchte ich dich dann doch auch bitten, dass du aufhörst Strukturen und Klassen (typedefs natürlich auch, so wie size_t eines ist) zu verwenden, weil die werden ja auch nicht gehighlightet



  • ja, könnte man ändern



  • Ich argumentiere hier überhaupt nirgends (außer vielleicht im ersten Post). Wollte bloß mal von kingruedi hören was ihm so an size_t liegt. Benütze es ja auch des Öfteren. Er macht aber grade soviel tam tam drum (Signatur, etc.) 😉

    Dachte es hat einen speziellen Grund 🤡

    MfG SideWinder



  • size_t ist systemabhängig und wird für längenangaben benutzt. auf einem kleinen controller mit kleinem adressraum könnte size_t z.b. 8 bits sein



  • @SideWinder
    ja, weil es ein weit verbreiteter Fehler in Büchern und Tutorien ist, dass int oder so was anstelle size_t genommen wird. Deswegen muss man da ein wenig helfen. iostream anstelle von iostream.h ist ja mittlerweile nicht mehr so ein Problem.

    🙂



  • Mal ne ganz naive Frage:

    Wofür steht das "_t" bei size_t? Für Typ?



  • Gregor schrieb:

    Mal ne ganz naive Frage:

    Wofür steht das "_t" bei size_t? Für Typ?

    Das kommt wohl noch aus alten C-Zeiten. K&R haben mal eingeführt, dass typedef-Typen mit Unterstrich-T enden. Daher stammt auch der Name wchar_t (obwohl wchar_t in C++ ein eingebauter Typ und kein Typedef ist).


Anmelden zum Antworten