Heim > Artikel > Backend-Entwicklung > So konvertieren Sie C++-Typen
Methoden: 1. static_cast, wird für die Konvertierung nicht polymorpher Typen verwendet; 2. reinterpret_cast, wird in einen anderen nicht verwandten Typ konvertiert; 3. const_cast, löscht das const-Attribut der Variablen und weist es dann zu. 4. Dynamic_cast, wird für Klassen verwendet Zeiger- oder Referenzkonvertierung zwischen Vererbungsebenen.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, C++17-Version, Dell G3-Computer.
Um die Typkonvertierung in C zu standardisieren und die Sichtbarkeit der Typkonvertierung zu verbessern, führt C++ vier erzwungene Typkonvertierungsoperatoren ein: static_cast, reinterpret_cast, const_cast, Dynamic_cast
Sie sind im Wesentlichen Vorlagenklassen.
Das Folgende wird separat eingeführt:
1.static_cast
Es wird für die Konvertierung nicht polymorpher Typen (statische Konvertierung) verwendet. entspricht der impliziten Typkonvertierung in C, kann jedoch nicht für beide verwendet werden Konvertierung nicht verwandter Typen, z. B. Konvertierung zwischen Ganzzahl und Ganzzahlzeiger. Obwohl es sich bei beiden um vier Bytes handelt, stellt einer Daten und der andere eine Adresse dar. Die Typen sind irrelevant und können nicht konvertiert werden.
Diese Konvertierung wird zur Kompilierungszeit abgeschlossen, ähnlich der Typkonvertierung im C-Stil, aber bitte beachten Sie die folgenden Punkte:Kann nicht zwischen zwei Klassentypen konvertiert werden, die keine Ableitungsbeziehung haben.Der Typmodifikator des ursprünglichen Typs kann nicht entfernt werden , wie const, volatile, __unalignedDa beim Konvertieren von Objekten keine dynamische Typprüfung erfolgt, bestehen Sicherheitsrisiken beim Konvertieren von Basisklassenobjekten in abgeleitete Klassenobjektevoid Test() { //C中的方式 int i = 10; double d1 = i;//隐式类型转换 //int *p = i;//无法隐式类型转换,只能强制类型转换 int *p = (int*)i; //C++中的方式 double d2 = static_cast<double>(i); //相当于创建一个static_cast<double>类型的匿名对象赋值给d2 int* p2 = static_cast<int*>(i);//无法转换,会报错 }
2.reinterpret_cast
Die Bedeutung von reinterpret Die Neuinterpretation kann einen Typ in einen anderen, nicht verwandten Typ konvertieren,entspricht der erzwungenen Typkonvertierung in C und behandelt Situationen, in denen eine implizite Konvertierung nicht durchgeführt werden kann
void Test() { int i = 10; int* p2 = reinterpret_cast<int*>(i); }Erzwungene Typkonvertierung kann manchmal heftige Probleme lösen
Das folgende Beispiel:
Wie kann eine Funktion mit Parametern ohne Übergabe von Parametern aufgerufen werden?
void Fun(int s) { cout << s << endl; } typedef void(*FUNC)(); void Test() { FUNC pf = reinterpret_cast<FUNC>(Fun); pf(); }Casting in C wird ebenfalls übernommen. Obwohl wir Funktionszeiger mit dieser BUG-Methode konvertieren, ist dieser Code nicht portierbar und führt manchmal zu unsicheren Ergebnissen. Daher wird die Verwendung auf diese Weise nicht empfohlen. Der hier ausgegebene Wert von s ist jedoch ein Zufallswert Wenn der Benutzer keine externen Parameter übergibt, erstellt die Funktion beim Aufruf einen formalen Parameter. Der formale Parameter ist natürlich ein Zufallswert. Das const-Attribut der Variablen eignet sich für die Neuzuweisung wird zur Kompilierzeit abgeschlossen und dient zum Entfernen der const- und volatile-Modifikatoren. Es kann nur Zeiger oder Referenzen konvertieren. Dynamic_cast wird hauptsächlich für „sicheres Abwärtscasting“ verwendet Referenzkonvertierung zwischen Klassenvererbungshierarchien. Es wird hauptsächlich zur Durchführung eines „sicheren Downcasting“ verwendet, d. h. zum Konvertieren von Zeigern oder Referenzen von Basisklassenobjekten in andere Zeiger oder Referenzen derselben Vererbungsebene.
void Test3() { const int i = 10; int *p = const_cast<int*>(&i); *p = 20; cout << i << endl; cout << *p << endl; }Empfohlenes Tutorial: „
C#“
Das obige ist der detaillierte Inhalt vonSo konvertieren Sie C++-Typen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!