Beste Antwort
Die Typprüfung wird von der Typprüfung durchgeführt, die überprüft, ob der Typ eines Konstrukts (Konstante, Variable, Array, Liste, Objekt) entspricht den Erwartungen in seinem Verwendungskontext. Dies stellt sicher, dass bestimmte Arten von Programmierfehlern erkannt und gemeldet werden. Betrachten Sie beispielsweise den folgenden Ausdruck mit dem Modulo-Operator 8\% 3.5. Dieser Ausdruck führt zu einem Fehler, da der Modulo-Operator zwei Ganzzahlen erwartet. Die Typprüfung muss Folgendes wissen: – Syntaktische Konstrukte in der Sprache (z. B. Operatoren) – Grundlegende Sprachtypen (int, real) – Regeln für die Zuweisung von Typen zu Konstrukten zB „Wenn beide Operanden von + int sind, ist das Ergebnis int“
Es gibt zwei Arten der Typprüfung: Statisch und Dynamisch
Statische Typprüfung: Typprüfung zur Kompilierungszeit. Wenn Sie diese Sprachen verwenden, müssen Sie den Variablentyp deklarieren, bevor Sie sie verwenden (Compiler) muss wissen, zu welchem Datentyp die Variable gehört). Betrachten Sie zum Beispiel eine Anweisung in c ++ int a = 10; Hier muss der Compiler den Datentyp der Variablen „a“ kennen, bevor er sie verwendet. Beispielsweise sind C, C ++, JAVA, C # einige statisch typisierte Sprachen
Dynamisch Typprüfung: Typprüfung zur Laufzeit. Wenn Sie diese Sprachen verwenden, müssen Sie den Variablentyp nicht angeben oder deklarieren, sondern der Compiler selbst ermittelt, welcher Typ eine Variable ist, wenn Sie ihr zum ersten Mal einen Wert zuweisen. Betrachten Sie nun einige Anweisungen in Python: str = „Python“ str2 = 10 Hier müssen Sie den Datentyp nicht deklarieren. Der Compiler selbst weiß, zu welchem Typ die Variable gehört, wenn Sie ihr zum ersten Mal einen Wert zuweisen (str1 ist vom Datentyp „String“ und str2 vom Typ „int“). Beispiel: VBScript und Python sind Dynamisch typisierte Sprachen.
Antwort
Bei der Typprüfung wird geprüft, ob der Vorgang aktiviert ist Variablen verwendet kompatiblen Typ. Verschiedene Sprachen haben unterschiedliche Kompatibilitätsstufen für Variablen. Stark typgeprüfte Sprachen haben strenge Regeln für Variablentypen im Ausdruck. Auf der anderen Seite der Medaille gibt es Sprachen, die das Mischen verschiedener Arten ermöglichen. Diese Sprachen kompensieren gemischte Typen in gewisser Weise durch Verwendung einiger Regeln für variable Konvertierungen.
In einigen strengen Typensprachen können Sie beispielsweise nur zwei Ganzzahlen oder zwei Gleitkommazahlen hinzufügen, aber einen Fehler melden, wenn Sie es versuchen um einem Float eine Ganzzahl hinzuzufügen. Wenn Sie in einem anderen Sprachen einem Float eine Ganzzahl hinzufügen, wird die Ganzzahl möglicherweise implizit in einen Float konvertiert und anschließend hinzugefügt.
C ++ befindet sich irgendwo in der Mitte. In C ++ sind einige implizite Konvertierungen möglich. C und C ++ haben einige Lücken. Erstens heißt Casting. Beim Casting wird der Compiler im Grunde genommen angewiesen, eine Variable als „diesen Typ“ zu bezeichnen, im Gegensatz zum deklarierten Wert. Wenn wir beispielsweise im obigen Beispiel möchten, dass der Float als int behandelt wird, können wir den float in einen int umwandeln.
Beispiel: int x, a; float y, b;
b = x + y;
a = x + (int) y; oder Sie möchten vielleicht a = (int) (x + y);
Da Zeiger im Allgemeinen typisiert werden, können wir Casting verwenden, um eine Struktur wie einen anderen Strukturtyp aussehen zu lassen.
typedef struct {/ * mitglieder * /} A;
typedef struct {/ * mitglieder * /} B;
A axe;
B * bp;
bp = &ax; // Fehler: verschiedene Arten von Zeigern!
bp = (B *) &ax; // definiert effektiv eine Überlagerung A mit B wie eine Vereinigung
Bei Zeigern gibt es auch eine Leere *, die ein Platzhalterzeiger ist. Ermöglicht die Verwendung, wenn ein beliebiger Zeigertyp zulässig ist, z. B. Funktionen vom Typ mem, z. memcpy.