Frage zu C++-Standard bzgl. Typgröße und Overflow



  • Hallo, ich habe 2 kurze Fragen zum C++ - Standard.
    1.) In C ist der Overflow von signed Integern ja undefiniert (oder implententation defined?). Ist das in C++ auch so?
    2.) Schreibt der Standard die Größen der POD's vor? ich weis nur, dass char <= short <= int <= long ( <= long long ) gelten muss. Aber werden auch Mindestgrößen vorgeschrieben? Konnte im Standard irgendwie nix dazu finden (unser Vorlesungsskript behauptet nämlich, dass char immer 8 bit, short immer 16 bit, int immer 32 bit und long immer 64 bit hat. Aber ich glaube, dass das falsch ist (auch wenn es vielleicht üblich ist)).

    Schonmal Danke für Antworten 🙂



  • 1.- was heisst undefiniert? wenn du zu gross wirst, wirds ganz klein - und umgekehrt. halt bitarithmetik

    2.- soweit ich weiss schreibt der der standard nichts vonw egen den größen vor ausser halt was du da geschrieben hast. vllt noch, dass char 8 bit sind, aber dass int == 32 ist ist schon sofort auf 64bit systemen falsch !


  • Mod

    StandardFrage schrieb:

    Hallo, ich habe 2 kurze Fragen zum C++ - Standard.
    1.) In C ist der Overflow von signed Integern ja undefiniert (oder implententation defined?). Ist das in C++ auch so?

    Ja, ist undefiniert.

    2.) Schreibt der Standard die Größen der POD's vor? ich weis nur, dass char <= short <= int <= long ( <= long long ) gelten muss. Aber werden auch Mindestgrößen vorgeschrieben? Konnte im Standard irgendwie nix dazu finden (unser Vorlesungsskript behauptet nämlich, dass char immer 8 bit, short immer 16 bit, int immer 32 bit und long immer 64 bit hat. Aber ich glaube, dass das falsch ist (auch wenn es vielleicht üblich ist)).

    Die Mindestgrößen sind die gleichen wie in C:
    http://en.wikipedia.org/wiki/Limits.h



  • [quote="StandardFrage"]Schreibt der Standard die Größen der POD's vor?/quote]
    PODs sind nochmal ne ganz andere Baustelle als die eingebauten Datentypen.



  • Skym0sh0 schrieb:

    dass char 8 bit sind

    Falsch! Ein char ist exakt so gross wie die kleinste adressierbare Einheit des Systems (also Byte). Wieviele Bits ein Byte hat, hat C++ nicht zu entscheiden.

    Skym0sh0 schrieb:

    int == 32 ist ist schon sofort auf 64bit systemen falsch !

    Du verwechselst da etwas. Die Integergrösse hat nichts mit der Zeigergrösse gemeinsam.



  • ?

    also sind die zeiger bei einem 64 bit system auch 8 byte ?
    ok wäre sinnvoll und logisch, da man ja auf einem 32 bit system nur 4gb ram addressieren kann...



  • Skym0sh0 schrieb:

    also sind die zeiger bei einem 64 bit system auch 8 byte ?

    Ja. Und mit der Grösse eines Integers hat das nichts zu tun!



  • Danke SeppJ. Genau das wollte ich wissen 🙂



  • EOutOfResources schrieb:

    Skym0sh0 schrieb:

    dass char 8 bit sind

    Falsch! Ein char ist exakt so gross wie die kleinste adressierbare Einheit des Systems (also Byte). Wieviele Bits ein Byte hat, hat C++ nicht zu entscheiden.

    Doch... Mindestens 8 Bit...

    EDIT: Also bei meinem nächsten Beitrag droht ein Overflow ^^



  • XSpille schrieb:

    Doch... Mindestens 8 Bit...

    *nachschau*
    Hast recht. So sieht's gemäss C++03 aus:

    1 ≡ sizeof(char)sizeof(short)sizeof(int)sizeof(long)
    1 ≡ sizeof(bool)sizeof(long)
    sizeof(char)sizeof(wchar_t)sizeof(long)
    sizeof(float)sizeof(double)sizeof(long double)
    sizeof(N)sizeof(signed N)sizeof(unsigned N)
    char hat ≥ 8 Bits.
    short hat ≥ 16 Bits.
    long hat ≥ 32 Bits.


Anmelden zum Antworten