Typen

Im Computer werden Daten in binärer Form abgespeichert und ohne genaue Kenntnis der Bedeutung der Bits wäre es unmöglich, diesen Daten einen Wert zuzuordnen. C und C++ löst dies, indem der Programmierer gezwungen wird, jegliche Werte mittels eines eindeutigen Typs zu deklarieren, was man als Typisierung bezeichnet. Hier werden die Typen aufgelistet, welche in C und C++ in die Sprache eingebaut sind. Anhand dieser Typen kann jeder beliebige weitere Typ konstruiert werden. Die Zuweisung eines Typs zu einem Symbol nennt man Deklaration.

Allgemeines über Typen

Deklaration, PrototypAnkündigung eines Symbols
Definition, InitialisierungBereitstellung und Initialisierung eines Symbols
Heap, StackDie Verwendung des Speichers

Basistypen

C und C++ stellen einige wenige Basistypen zur Verfügung. Sie bilden die Grundbausteine des Typsystems und können mittels erweiterten Typen (siehe weiter unten) zu beliebigen Typen erweitert werden. Basistypen dienen hauptsächlich dazu, arithmetische Werte zu speichern, es gibt aber auch einen Basistyp für logische Werte und sogar einen für Nichts.

Das Programmiertechnische Nichts
voidNichts, Unbekannt, Ungültig, zu ignorieren

Arithmetische Typen

Integrale Typen
char1-Byte-Wert
short2-Byte-Wert
int4-Byte-Wert
long long8-Byte-Wert
signedVorzeichenbehafteter Typ
unsignedVorzeichenloser Typ
wchar_tWide-Character
Fliesskomma-Typen
floatFliesskomma-Wert mit einfacher Genauigkeit
doubleFliesskomma-Wert mit doppelter Genauigkeit
long doubleFliesskomma-Wert mit vierfacher Genauigkeit

Boolscher Typ

boolBoolscher Wahrheitswert
trueWahrheitswert für Wahr
falseWahrheitswert für Falsch

Erweiterte Typen

Erweiterte Typen erlauben es, Basistypen miteinander zu kombinieren und somit beliebig komplexe Typen zu deklarieren. Durch diese Erweiterungen können sämtliche Typen addressiert, strukturiert, zu Funktionen verpackt, mit Eigenschaften belegt und in generischer Programmierung verwendet werden.

Adressierende Typen

*Pointer
[]Array
&Referenz
void*Zeiger auf unbestimmten Typ
Null-PointerAuf Null initialisierte Pointer
(*)()Funktionspointer

Strukturierende Typen

structZusammengehörige Deklaration
classKlassendeklaration
namespaceGruppierung von Symbolen
usingEinbinden einer Symbolgruppe
enumAufzählungs-Typ
unionGemeinsame Typdeklaration
Bitfeld :Ganzzahl mit bestimmter Bitanzahl
AttributeCompiler-Anweisungen für Typen
POD, AggregatePlain Old Data und Aggregat-Zuweisung

Funktionen

Funktions-DeklarationDeklaration einer Funktion
Funktions-DefinitionDefinition einer Funktion
Argumente, ParameterÜbergabe von Werten und Variablen
return-valueRückgabewert
Funktions-ÜberladungGleichnamige Funktionen mit unterschiedlicher Signatur
Auslassungspunkte ...Variadische Funktionen
maindie main-Funktion
constKeyword für eine Funktion im const-safe-Bereich
throwKeyword für eine Funktion mit eingeschränktem Exception-Handling
const-safeSicherer Umgang mit Argumenten
inlineFunktion soll direkt in den Code integriert werden

Typ-Eigenschaften

Speicherklassen
autoAutomatische Allokation und Deallokation auf dem Stack
staticEinmalige Definition
registerBenutzung eines Prozessorregisters
externAllokation und Deallokation wird an anderer Stelle vorgenommen
mutableFeld ausserhalb von const-safe Bereich eines Objektes
typedefBenennung eines Typs mit einem Symbol
Qualifikatoren
constWerte bleiben unverändert
volatileWerte müssen stets neu ausgewertet werden
restrictPointer zeigen nicht an überlappende Speicherbereiche

Generische Programmierung

TemplatesGenerische Compilierung
templateKeyword für die Deklaration generischer Typen
classKeyword für die Kennzeichnung einer beliebigen Klasse
typenameKeyword für die Kennzeichnung eines beliebigen Typs
exportTemplate-Definitionen befinden sich in einer anderen Datei