Der Typ bool
wird für die Resultate von Vergleichsoperationen
() benutzt. Er kann die Werte
true
oder false
besitzen. Weiterhin ist er frei in den
int
Datentyp umwandelbar, wobei true
einer 1 und false
einer 0 entspricht. Diese Umwandlung stellt die Aufwärtskompatibilität zu
alten Programmen her, die statt bool
einfach int
's verwendeten.
Einige einfache Deklarationen sind:
bool test; // declare test test =(0 < 5); // comparison with result true // test is set to true int i(test); // i is declared and set to 1
Die Initialisierung/Konstruktion einer Variablen kann in der Form type variable = type_constant oder äquivalent durch type variable(type_constant) erfolgen. Das Gleichheitszeichen an dieser Stelle ist keine Zuweisung, da die Variable gerade erst ins Leben gerufen wird und nicht bereits im Programm existiert.
Der Typ int
ist der Datentyp, der auf der jeweiligen Maschine
vom Compilerschreiber als der für die Verarbeitung ganzer Zahlen
als ``geeignetster'' empfunden wurde.
Über seine Größe ist im Standard nichts festgelegt.
Mit Hilfe des sizeof
Operators kann man seine Größe in Einheiten der Größe eines
char
erfragen, der gleichzeitig der kleinste Datentyp ist. Ein
char
wurde vom Compilerschreiber als der für
Einzel(schrift)zeichen geeignete Typ gewählt.
Verschiedene Rechner unterstützen noch weitere ganzzahlige
Datentypen, z.B. neben 32-bit
int
auch 16 oder 64-bit große Variablen.
Diese lassen sich ggf. Deklaration von
short
und long
oder gar (nicht ANSI konform) long long
ansprechen. Nach diesen Schlüsselworten darf
int
fehlen. Man beachte, daß eine Integer-Variable,
immer einen ganzzahligen Wert hat - auch wenn man ihr eine
reelle Zahl zuweist.
Beispiele für int
eger Deklarationen sind:
bool test; // declare test test =(0 < 5); // (see above) int i(test); // i is declared and set to 1 int j=0; // j is declared and set to 0 long l, n, m; // l, n, and m are declared "long" short s1, s2; // s1 and s2 are declared "short" cout << sizeof(test) << " " << sizeof(i) << " " << sizeof(l) << " " << sizeof(s1) << "\n"; // check size of: test, i, l, s1 // Note: this is not guaranteed // on my machine I get: 8 4 8 2 // ANSI should give: 1 (for bool) i = 37; j = 3.5674; // ATTENTION cout << i << " " << j << "\n"; // this leads to: 37 3
float
und double
sind Gleitkommatypen einfacher
und doppelter Genauigkeit, die zu numerischen Zwecken geeignet sind.
long
kann zur Modifikation von double
verwendet werden,
um vierfache Genauigkeit zu erhalten (falls diese unterstützt sein
sollte). Die exakte Gleitkommarepräsentation ist abhängig von der
Hardware-Unterstützung. Es ist heute (1998) üblich,
für doppeltgenaue Gleitkommazahlen zumindest die Grundrechenarten
innerhalb der CPU in Rechnerhardware durchzuführen. Einfachgenaue
Zahlen müssen dazu erst in doppeltgenaue gewandelt werden.
Aus diesem Grund und der allgemein hohen Anforderungen numerischer
Rechnungen sollte man float
nur noch dort verwenden, wo dies
durch z.B. Speicherplatzbeschränkungen erfordert wird.
C/C++ legt nichts über die wirkliche Repräsentation
der Variablen im Speicher fest. Insbesondere ist der
Speicherbedarf einer Variablen nicht definiert,
es gelten aber immer die Beziehungen:
1 = sizeof(char) = sizeof(bool)
sizeof(short)
sizeof(int)
=
sizeof(unsigned)
sizeof(long)
und
sizeof(float)
sizeof(double)
sizeof(long double)
.
Im allgemeinen sind auf UNIX-Arbeitsplatzrechnern int
-Variablen
32, short
16 und char
8 bit lang. Doppeltgenaue
double
s erfordern 64 bit, float
32 bit.
Die wirklichen Werte können jedoch im Prinzip
sogar von Compiler zu Compiler verschieden sein!
Die folgenden Beispiele deklarieren verschiedene Datentypen.
#include <string> using std::string; char c1 = 'x'; // one character: 'x' char c2[] = "hello"; // text array with 5 characters // (note: length is 6 due to added '\0') string str("hello"); // the C++ way, arbitrary length strings // (note: length is 5 - no added '\0') char c3 = '\n'; // the new-line character int i_var; // integer variable with name i_var long int il_var = 1L; // long constant short is_var; // short integer variable (int per default) double d_var = 34.2; // real number 34.2 with double precisionBei
char
Variablen ist zu beachten, daß einzelne Zeichen
mit einem einfachen '
eingeschlossen werden können, längere
Zeichenketten jedoch mit dem doppelten "
begrenzt werden
müssen. Die Variablen c1
und c3
haben beide die Länge
Eins, wohingegen die Zeichenkette "hello"
im ``Feld''
c2
abrufbar ist und die Länge Sechs hat,
da automatisch ein Zeichenkettenende '\0'
angefügt wird.
(Die Definition char c2 = 'hello';
führt zu
einer Fehlermeldung). Flexibler ist die C++ Methode, string
s
zu benutzen, die den Zeichenkettenterminator '\0'
nicht
benötigen.
Variablendeklaration sind in C++ nicht auf den Anfang eines Blockes
beschränkt (wie in C), sondern können überall erfolgen, wo die
Variable erstmals an einer Stelle auftaucht und wo auf sie zugewiesen
werden kann. Wichtig ist insbesondere die Deklaration innerhalb einer
for(;;)
Schleife
double a; cin >> a; // input a via keyboard int i_trunc = a; // throw away the fractional part for ( int i=0; i < i_trunc; i++ ) { ... }Im obigen Programm ist
i
außerhalb der for(;;)
Schleife (d.h. nach der letzten zugehörigen geschlossenen Klammer,
oder der letzten Anweisung des Schleifenkörpers) nicht mehr existent.
Zusammenfassung
(i) Deklarationen können an fast beliebiger
Stelle im Programm stehen
(ii) Initialisierung erfolgt in ()
oder =
Form; es findet keine Zuweisung sondern eine Initialisierung statt!
(iii) sizeof(type)
kann eingesetzt werden, wenn die Größe
eines Typs im Programm bekannt sein muß, dies ist für die
Portabilität zwischen verschiedenen Rechnern interessant.