size_type



  • Ich benutze die X::size_type-Typen eigentlich nie und nehme dafür halt size_t. Irgendwo wird dann ja doch implizit gecastet und es versaustaltet einfach den Code. Da freue ich mich übrigens wieder einmal auf "auto" 🙂



  • Du kannst eigentlich auch unsigned int nehmen. Kennt jemand eine Implementierung, wo das nicht das Gleiche wie size_t ist?



  • @Nexus: ? unsigned int ist ja noch länger als size_t (zu tippen). Warum sollte man das machen? Ist es nicht auf einigen 64-bit Systemen so, dass int (also auch unsigned int) 32-bit groß ist, die Addressen aber 64-bit groß sind? Dann wäre das schon mal ein Beispiel, bei dem unsigned int zu klein sein kann. Mit size_t ist man auf relativ sicherer Seite.

    Gruß
    Don06



  • Stimmt schon, daran hab ich gar nicht mehr gedacht. War ein blöder Einwand von mir. 😉

    (Ich bezog mich eigentlich darauf:

    Stromberg_ schrieb:

    Den Rückgabewert von size() soll man doch nur in einer Variable des Typs "size_type" ablegen?

    , aber eben zu Unrecht.)



  • Naja ... size_t ist ja nicht der Typ, in dem man Adressen speichern soll, sondern eben ein Größentyp.



  • Ja, aber in einem 64-bit Addressraum kann ein Byte-Array nunmal eine maximale Länge von 2^64 haben und diese Länge lässt sich dann hervorragend in 64-bit speichern.



  • Aber auf dem sichersten Weg ist man doch immer noch wenn man den dazugehörigen ::size_type verwendet?

    MfG
    Stromberg



  • Stromberg schrieb:

    Aber auf dem sichersten Weg ist man doch immer noch wenn man den dazugehörigen ::size_type verwendet?

    Japp, ist man - mach ich übrigens auch immer... hab bis jz auch noch niemals nen grund gehört, warum man das nicht sollte - das "argument" schreibaufwand find ich hier fehl am platz - und unübersichtlicher wird es dadurch auch nicht - ich finds eher (viel ^^) übersichtlicher... allerdings sehen meine meisten klassen auch so in etwa aus:

    class X
    {
     public:
      typedef int ValueType;
      typedef std::vector <ValueType> ContainerType;
    /*...*/
    };
    
    void X::test()
    {
     ContainerType::size_type = /*...*/;
    }
    

    also ist der nachteil von wegen "man muss zu viel ändern, wenn man nen anderen datentyp etc. nimmt" auch nicht mehr gegeben...

    sind zwar ein paar zeichen mehr als size_t aber auch nicht so extrem viel mehr und tippen muss ich wegen IntelliSense ja eh kaum mehr als size_t - und ich habe auch noch keinen Programmierer gesehen, der nur nicht schneller programmieren konnte, weil er nicht schneller tippen konnte - iwie hing es dann doch immer am denken - und an den selbst eingebauten fehlern ^^

    bb



  • Nexus schrieb:

    Du kannst eigentlich auch unsigned int nehmen.

    Nein, kann man nicht! Das ist kein korrektes C++ Programm mehr. Der typedef von size_t hat schon seine Gründe.

    Nexus schrieb:

    Kennt jemand eine Implementierung, wo das nicht das Gleiche wie size_t ist?

    Ja, jedes UNIX ist entweder ILP32 oder LP64, damit ist im 64Bit Modus sizeof(int) == 4 und sizeof(size_t) == 8.



  • Nexus schrieb:

    Du kannst eigentlich auch unsigned int nehmen. Kennt jemand eine Implementierung, wo das nicht das Gleiche wie size_t ist?

    warum kommen immer wieder leute auf die idee, andere datentypen nehen zu müssen, das bringt nix außer probleme.



  • [quote="wiesonur"]

    Nexus schrieb:

    Du kannst eigentlich auch unsigned int nehmen. Kennt jemand eine Implementierung, wo das nicht das Gleiche wie size_t ist?

    Nexus,
    am besten du schlägst dein buch ma auf, da bekommst die antwort.

    frohe weihnachten an alle :xmas1:



  • Don06 hat die Sache klargestellt und ich habe meinen Fehler eingesehen. Ich weiss auch nicht, warum jetzt alle darauf rumreiten müssen... 🙄


Anmelden zum Antworten