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); }
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(); }
void Test3() { const int i = 10; int *p = const_cast<int*>(&i); *p = 20; cout << i << endl; cout << *p << endl; }
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!