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 intsigned short int
unsigned short intsigned long int
unsigned long intsigned long long
unsigned long longsigned char
unsigned char
w_charfloat
double
long double// und theoretisch dann noch
stringIch muss mal schauen, wo ich kürzen kann mit meinen Funktionen.
-
D schrieb:
signed char
unsigned char
w_charhier 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 samealignment 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!!!