Konvertierungsoperatoren in C
Frage: Wie funktionieren Konvertierungsoperatoren in C und wann versucht der Compiler den nach dem Konvertierungsoperator definierten Typ ersetzen?
Antwort: Konvertierungsoperatoren in C erleichtern Typkonvertierungen zwischen Klassen oder von Klassen in grundlegende Typen. Der Compiler ersetzt den nach dem Konvertierungsoperator angegebenen Typ in den folgenden Situationen:
Konvertierung während der Argumentübergabe:
- Während der Argumentübergabe gelten die Regeln für die Kopierinitialisierung gelten unter Berücksichtigung jeder Konvertierungsfunktion, unabhängig davon, ob sie in eine Referenz konvertiert wird oder nicht.
- Beispiel: void f(B); int main() { f(A()); }
Konvertierung in Referenz:
- In bedingten Operatoren ist die Konvertierung in einen Referenztyp möglich, wenn der Typ, in den konvertiert wird, ein L-Wert ist.
- Beispiel: B b; 0 ? b : A();
Konvertierung in Funktionszeiger:
- Konvertierungsfunktionen in Funktionszeiger oder Referenzen können verwendet werden, wenn ein Funktionsaufruf erfolgt gemacht.
- Beispiel: typedef void (*fPtr)(int); void foo(int a); struct test { Operator fPtr() { return foo; } };
Konvertierung in Nicht-Klassentypen:
- Benutzerdefinierte Konvertierungsfunktionen können für implizite Konvertierungen mit Nicht-Klassentypen verwendet werden .
- Beispiel: struct test { Operator bool() { return true; } };
Konvertierungsfunktionsvorlagen:
- Vorlagen können zum Erstellen von Konvertierungsfunktionen verwendet werden, mit denen ein Typ in einen beliebigen Zeigertyp konvertiert werden kann .
- Beispiel: struct test { template Operator T*() { return 0; } };
-
Achtung: Diese sollten mit Vorsicht verwendet werden, da sie zu mehrdeutigen Konvertierungen führen können.
Das obige ist der detaillierte Inhalt vonWie funktionieren Konvertierungsoperatoren in C und wann verwendet der Compiler sie zur Typersetzung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!