Was ist toll an size_t?



  • 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).



  • Jo. size wär ein bisschen nervig, weil jede zweite size_t Variable size heißt 😉



  • SideWinder schrieb:

    1. Doch ich schreibe "unsigned long int" und nicht "unsigned long"

    Naja, deinen Programmierstil kann man sowieso nicht ernstnehmen. Du klammerst das return-Argument obwohl es sich bei return nicht um eine Funktion handelt, du verwendest const Value-Parameter, du schreibst unsigned long int usw.

    Btw:
    <: ist ein Digraph. Wenn du also einen Vector von ::std::irgendwas anlegen willst, musst du ein Leerzeichen zwischen der spitzen Klammer und dem ersten Doppelpunkt machen.



  • Bashar schrieb:

    Jo. size wär ein bisschen nervig, weil jede zweite size_t Variable size heißt 😉

    Das Problem sehe ich nicht. Man hat ja auch kein string_t oder so, obwohl es hier wohl ein ähnliches Problem gibt.



  • @Hume: const value mach ich nicht mehr. Was ist so schlimm an return in Klammern? Und was ist daran so schlimm wenn ich mich klar und deutlich mit unsigend long int ausdrücke?

    MfG SideWinder


Anmelden zum Antworten