divide and conquer / size_t und size_type / Bezeichner von Konstanten



  • Warum die nicht durch -Wall oder -Wextra aktiviert wird, habe ich mich auch schon gefragt 😮



  • brotbernd schrieb:

    Gugelmoser schrieb:

    Verwendet ihr, wenn etwas nicht <0 werden kann, einen unsigned Typen?

    i.d.R. ja.

    Ist es angebracht, dann einfach immer size_t zu benutzen?



  • Gugelmoser schrieb:

    Ist es angebracht, dann einfach immer size_t zu benutzen?

    Nein. size_t hat eine besondere Semantik: Es ist speziell für Speichergrößen und positionen im Speicher gedacht. Für Sachen wie: "wie viele gerade zahlen gibt es in diesem Array" würde ich daher als Ergebniswert unsigned nehmen.



  • Ich persönlich mag size_t nicht. Es führt neue integrale Typen in C++ ein und macht Code inkonsistenter. Alleine schon die beiden Fronten size_t und std::size_t ... Ausserdem benötigt man dazu einen Header (auch wenn dieser meist indirekt eingebunden wird).

    Und std::vector::size_type ist ganz schlimm, erneut ein Stück Generizität für gar nichts. Es schafft wieder die Notwendigkeit neuer Konvertierungen, wobei die Fehleranfälligkeit bei solch intransparenten typedef s lediglich steigt.

    Betrachtet man nur aktuelle Architekturen, fände ich unsigned int als Standardlösung gar keinen so schlechten Kompromiss.

    otze schrieb:

    Nein. size_t hat eine besondere Semantik: Es ist speziell für Speichergrößen und positionen im Speicher gedacht. Für Sachen wie: "wie viele gerade zahlen gibt es in diesem Array" würde ich daher als Ergebniswert unsigned nehmen.

    Hier fängts schon an. Vergleiche mal die Rückgabetypen von std::vector::size() , std::count() und deiner AnzahlGeradeZahlen() -Funktion. 3 verschiedene Typen, um eine Anzahl zu erhalten. Das kanns doch nicht sein.


  • Mod

    otze schrieb:

    Für Sachen wie: "wie viele gerade zahlen gibt es in diesem Array" würde ich daher als Ergebniswert unsigned nehmen.

    Mir scheint der Wertebereich hierfür ist der der Größe des Arrays, und somit unmittelbar mit size_t verknüpft.



  • otze schrieb:

    Gugelmoser schrieb:

    Ist es angebracht, dann einfach immer size_t zu benutzen?

    Nein. size_t hat eine besondere Semantik: Es ist speziell für Speichergrößen und positionen im Speicher gedacht. Für Sachen wie: "wie viele gerade zahlen gibt es in diesem Array" würde ich daher als Ergebniswert unsigned nehmen.

    Des können aber ein guter Haufen mehr sein als in einen "unsigned" reinpassen.
    "unsigned" ist mit MSVC (sowie vermutlich allen anderen Windows Compilern) und Target = x64 nämlich 32 Bit gross. Genau so wie long dort immer noch 32 Bit gross ist.
    Nur um ein Beispiel zu nennen.



  • hustbaer schrieb:

    Nur um ein Beispiel zu nennen.

    dann mach unsigned long draus. An der Semantik ändert das 0.



  • otze schrieb:

    hustbaer schrieb:

    Nur um ein Beispiel zu nennen.

    dann mach unsigned long draus. An der Semantik ändert das 0.

    Hä? Was soll das helfen?
    unsigned long ist mit MSVC/64 Bit auch nur 32 Bit gross (genau wie bei MSVC/32 Bit).
    Du müsstest schon unsinged long long nehmen.
    Nur unsinged long long könnte wieder grösser als nötig sein, z.B. weil es auf 32 Bit Systemen auch 64 Bit hat.

    size_t ist so gross, wie "Dinge" im Speicher platz haben.
    -> size_t ist für sowas genau das Richtige.

    Wieso kompliziert, wenns einfach auch geht?



  • hustbaer schrieb:

    Wieso kompliziert, wenns einfach auch geht?

    ? Du glaubst doch nicht ernsthaft, dass die letzten 4 Posts von mehr als nur akademischen Interesse sind?



  • Schauen wir uns an, wieviele Tage seit der Geburt Jesu' vergangen ist: Garantiert unsigned.
    Aber bilden wir uns nicht zuviel auf unsere Software und deren Einsatz in der Zukunft ein? Sollen wir wirklich einen 64-bitter zurückzugeben 😃 ?

    Ich denke schon.



  • hustbaer schrieb:

    Wieso kompliziert, wenns einfach auch geht?

    Finde ich auch. Deswegen benutze ich kein unsigned mehr.



  • otze schrieb:

    hustbaer schrieb:

    Wieso kompliziert, wenns einfach auch geht?

    ? Du glaubst doch nicht ernsthaft, dass die letzten 4 Posts von mehr als nur akademischen Interesse sind?

    Klar sind sie das.
    Du glaubst doch nicht ernsthaft dass ich dich jetzt noch ernst nehmen kann?


Anmelden zum Antworten