Datentypen



  • Hallo,
    ich möchte Funktionen für alle vordefinierten Datentypen schreiben, die sich
    aber alle ein wenig unterscheiden (dehalb kann ich kein template einbauen).
    Für welche Datentypen müsste ich die Funktion schreiben, dass ich alle ab-
    gedeckt habe?

    Danke im Voraus!



  • puh das ist ne ganze Reihe. Da haben wir die ganzzahligen Typen und die Fliesskommazahlen, letztere sind

    • float
    • double
    • long double

    dann gibts die integertypen:

    • int
    • short
    • long
    • unsigned int
    • unsigned short
    • unsigned long
    • signed char
    • unsigned char

    (da nicht definiert ist ob char signed oder unsigned ist schreibs bei dem ran, alle anderen sind per default signed)
    Datentyp fuer wide characters:

    • wchar_t

    und schliesslich noch

    • bool

    Dann am Ende vielleicht noch alle moeglichen und unmoeglichen Pointer...

    Ich behaupte mal ganz spontan, dass die Funktion fuer die meisten dieser Datentypen gleich aussehen wird, also machs doch per Template und spezialisiere, wo es nutwendig ist.

    Auf manchen Compilern gibts noch ein long long.



  • Für Pointer baruch ich die Funktionen nicht. Danke für die Liste! Brauche ich
    für string denn dann keine Funktion???



  • pumuckl schrieb:

    (da nicht definiert ist ob char signed oder unsigned ist schreibs bei dem ran, alle anderen sind per default signed)

    Klar ist das definiert - 'char', 'signed char' und 'unsigned char' sind drei unabhängige Datentypen (allerdings stimmt der Wertebereich von 'char' mit einem seiner Brüder überein - welcher, ist Sache des Compilers).

    @D: Wie stark unterscheiden sich denn die Versionen für die verschiedenen Datentypen?



  • std::string ist kein eingebauter Datentyp sondern eine Klasse der Standardbiblothek. char* wäre ja wieder ein Pointer, wobei er ja ein paar Besonderheiten hat (Zuweisung).



  • string ist kein Vordefinierter Datentyp in dem Sinne, sondern eine Klasse aus der C++-Standardbibliothek. Ob du die Funktion fuer strings brauchst kann ich dir nicht sagen, du bist schliesslich derjenige der sie schreibt und verwenden will. Wenn du die Funktion fuer alles brauchst, was C++ dir mitliefert, inklusive Standardbibliothek, dann bis irgendwann mal, da gibts naemlich zig Container, Iteratoren, Allokatoren, Traits, Streams,... (fuer die du groesstenteils nie im leben eine solche Funktion brauchen wirst)



  • Eine Frage hab ich noch:
    Zu welchen Datentypen gibt es long, signed und unsigned?

    Ich habe im Internet nähmlich noch long float entdeckt.



  • D schrieb:

    Eine Frage hab ich noch:
    Zu welchen Datentypen gibt es long, signed und unsigned?

    signed und unsigned gibt es für alle Ganzzahltypen (wobei außer für char (s.o.) 'signed T' und 'T' identisch sind), long für int und double, short für int.

    (außderdem können sie auch alleine stehen - dann wird als Grundtyp int ergänzt ('long' ist auch "nur" eine Kurzform für 'signed long int'))



  • long float waere mir voellig neu. Hast du einen Link?



  • Sry, hab nicht gescheid gelesen:
    In einigen älteren C-Systemen ist auch long float zulässig (nicht in ANSI-C)



  • Also, dann gibt es folgende Basisdatentypen (mit vollständigem Namen zur Über-
    sichts halber):

    bool

    signed int
    unsigned int

    signed short int
    unsigned short int

    signed long int
    unsigned long int

    signed long long
    unsigned long long

    signed char
    unsigned char
    w_char

    float
    double
    long double

    // und theoretisch dann noch
    string

    Ich muss mal schauen, wo ich kürzen kann mit meinen Funktionen.



  • D schrieb:

    signed char
    unsigned char
    w_char

    hier fehlt noch der reine 'char' - und der letzte heißt korrekt wchar_t

    string

    das ist immer noch kein eingebauter Typ von C++, sondern eine Klasse der Standardbibliothek (genauer gesagt - ein typedef auf std::basic_string<char,std::char_traits<char>,std::allocator<char> > )



  • In meinem C++-Buch steht, dass signed char und nur char das gleiche sind!!!



  • stimmt ja auch



  • Äh, mal noch eine Frage:
    gibt es unsigned float und unsigned double???



  • D schrieb:

    In meinem C++-Buch steht, dass signed char und nur char das gleiche sind!!!

    In Büchern steht eben manchmal Unsinn.

    D schrieb:

    gibt es unsigned float und unsigned double???

    Nein.



  • Und was ist dann der Unterschied zwischen char und unsigned char???



  • D schrieb:

    Und was ist dann der Unterschied zwischen char und unsigned char???

    Das hat CStoll doch schon geschrieben:

    CStoll schrieb:

    'char', 'signed char' und 'unsigned char' sind drei unabhängige Datentypen (allerdings stimmt der Wertebereich von 'char' mit einem seiner Brüder überein - welcher, ist Sache des Compilers).



  • c+++ schrieb:

    stimmt ja auch

    Nein, stimmt nicht - char ist eigenständig (sag mal, rede ich gegen eine Wand?):

    Ansi Standard schrieb:

    3.9.1 Fundamental types [basic.fundamental]

    1 Objects declared as characters char) shall be large enough to store
    any member of the implementation's basic character set. If a charac-
    ter from this set is stored in a character object, the integral value
    of that character object is equal to the value of the single character
    literal form of that character. It is implementation-defined whether
    a char object can hold negative values. Characters can be explicitly
    declared unsigned or signed. Plain char, signed char, and
    unsigned char are three distinct types.
    A char, a signed char, and an
    unsigned char occupy the same amount of storage and have the same

    alignment requirements (_basic.types_); that is, they have the same
    object representation. For character types, all bits of the object
    representation participate in the value representation. For unsigned
    character types, all possible bit patterns of the value representation
    represent numbers. These requirements do not hold for other types. In
    any particular implementation, a plain char object can take on either
    the same values as a signed char or an unsigned char; which one is
    implementation-defined.



  • Ok, dann kann mich jetzt an die Funktionen ran machen. Vielen Dank noch einmal an Alle!!!



  • Sry, aber das ist jetzt die letzte Frage. Also auf einer Internetseite habe
    ich gelesen es gäbe für Zeichen nur die Basisdatentypen char, signed char,
    unsigned char und wchar_t. so etwas wie signed und unsigned wchar_t gäbe es.
    Auf einer anderen Seite habe ich dann folgendes für Zeichen gelesen:
    (unsigned) wchar_t

    Gibt es jetzt unsigned wchar_t oder nicht???


Anmelden zum Antworten