kleine Funktion geschrieben (sehr kleine)



  • Windalf schrieb:

    je kleiner sizeof(size_t) auf nem system ausfallen wird desto kleiner wird auch tendenziell der arbeitsspeicher auf dem system sein und umgekehrt(und damit auch der stack) ich glaub kaum das es nen kompiler gibt der nen 8 bit int auf nem 32 bit rechner umsetzt...

    Keine Ahnung was du uns hiermit sagen willst. Aber size_t wird so definiert, dass du auch den maximalen Speicher damit ansprechen kannst. Keine Ahnung, ob du das mit int auf 64 Bit Systemen auch kannst.

    Windalf schrieb:

    versteh ich immer noch nicht was jetzt daran toller sein soll...(die gefahr das der zurückgelieferte wert nicht in ein int passt wirds ja wohl kaum sein)

    siehe oben
    Ich will jetzt nicht schon wieder 'ne Diskussion vom Zaun brechen, aber size_t nicht zu benutzen hat einige Nachteile. Ich für meinen Teil ärgere mich immer masslos, wenn ich Fremdcode compiliere und 1001 Warnungen wegen signed/unsigned Mismatch bekomme. Und nur weil ich mit dem höchsten Warnlevel compiliere. Sowas ist nicht nur ärgerlich, sondern sind auch potentielle Fehlerquellen.
    Glücklicherweise sehe ich immer mehr Leute size_t benutzen. Selbst Microsoft hat in seiner WinAPI einen size_t Typ. Der heisst dann logischerweise SIZE_T. 😃 Die definieren SIZE_T dann zB so, dass er die gleiche Breite wie ein Zeiger hat.
    Wenn's dich wirklich interessiert, dann such mal im Forum, da gibts schon genügend Stoff dazu.



  • otze schrieb:

    CarstenJ schrieb:

    Hallo,

    otze schrieb:

    template<class T,int i>
    int countem(T (&pArr)[i])
    {
       return i;
    }
    

    das ding kann ein array jedes typs zählen.

    den Code verstehe ich nicht. Wo wird da was gezählt? Kannst du das bitte mal erklären?

    natürlich hast du recht, es wird nicht gezählt, sodnern eher die größe abgefragt, aber es läuft aufs selbe hinaus.

    Wow, ist ja echt genial. Muss mich wohl auch mal damit auseinandersetzen. In welchem Buch wird dann sowas ausführlich erklärt?



  • ich hab mit modern c++ design begonnen, dann ein bischen in boost gesucht,einen abstecher in die expression templates gemacht,und vorallem viel selbst ausprobiert.



  • CarstenJ schrieb:

    Wow, ist ja echt genial. Muss mich wohl auch mal damit auseinandersetzen. In welchem Buch wird dann sowas ausführlich erklärt?

    Eigentlich reicht es manchmal, die Forensuche hier zu benutzen. 🙂
    Ich kann mich erinnern, dass das schon mal jemand gepostet hat. Weiss leider nicht mehr, wer das war.



  • Naja, mich hats trotzdem umgehauen. 🙂



  • das finde ich aber besser 😃

    template <typename type, unsigned int num> inline const unsigned int countem (type (&)[num]) { return (num); }
    


  • @de maestro
    goil



  • jo, const ist klasse, vorallem da der rückgabewert eh nicht verändert werden kann 🙄

    und das tolle inline hilft dem compiler sicher noch bei der optimierung, sonst würde er das ja auch nie schaffen 😉



  • jo, aber der unnamed parameter ist viel 1337ter als Deins. 😉



  • @de maestro
    Wenn ich Hume noch richtig in Erinnerung hab, dann hat der mal gesagt, dass const Rückgaben bei builtin Typen keinen Sinn machen, da diese nicht verändert werden können- const macht nur bei UDT's Sinn.

    @otze
    Das inline macht schon Sinn, denn normalerweise wird man so eine Funktion in irgendeine Header schreiben (das leidige Thema mit export ist dir ja bekannt). Und dann musst du die Funktion inline machen, sonst gibts schnell eine ODR Verletzung. Dass ein guter Compiler das auch ohne inline optimieren wird steht sicherlich ausser Frage.



  • template-Funktionen dürfen sowieso pro ÜE einmal definiert werden. Allerdings müssen die Definition identisch sein. Sie sind also im C++-Sinne automatisch inline.
    Insofern bringt hier das inline nichts.

    MfG Jester



  • edit: gelöscht


Anmelden zum Antworten