


Vier Arten von Umwandlungen in C++_Basic-Verwendung und Verwendungsszenarien
Typkonvertierung in C:
Die Dinge müssen von vorne beginnen, das ist die C-Sprache. Wir sind es gewohnt, C-ähnliche Typkonvertierungen zu verwenden, weil es so ist kraftvoll und einfach.
hat hauptsächlich die folgenden zwei Formen:
(neuer Typ) Ausdruck
neuer Typ (Ausdruck)
Das Konvertierungsformat im C-Stil ist sehr einfach, weist jedoch viele Mängel auf:
1. Die Konvertierung ist zu zufällig und kann zwischen allen konvertiert werden Typen. Sie können einen Zeiger auf ein konstantes Objekt in einen Zeiger auf ein nicht konstantes Objekt umwandeln und einen Zeiger auf ein Basisklassenobjekt in einen Zeiger auf ein abgeleitetes Klassenobjekt konvertieren. Die Lücke zwischen diesen Konvertierungen ist sehr groß, aber die traditionelle C-Sprache -Stilabgüsse machen keinen Unterschied zwischen diesen.
2. Es gibt keine einheitlichen Schlüsselwörter und Bezeichner für die Konvertierung im C-Stil. Bei großen Systemen kann es bei der Code-Fehlerbehebung leicht übersehen und ignoriert werden.
Typkonvertierung in C++:
Der C++-Stil löst die beiden oben genannten Probleme perfekt. 1. Die Typkonvertierung ist unterteilt und es werden vier verschiedene Konvertierungstypen bereitgestellt, um Konvertierungen mit unterschiedlichen Anforderungen zu unterstützen. 2. Die Typkonvertierung verfügt über eine einheitliche Kennung, die für die Fehlerbehebung und Überprüfung des Codes praktisch ist. Im Folgenden werden die vier Konvertierungen vorgestellt: static_cast, dynamische_cast, const_cast und reinterpreter_cast.
static_cast, die Benennung wird als statische Typkonvertierung verstanden. Zum Beispiel die Konvertierung von int in char.
dynamic_cast, die Benennung versteht sich als dynamische Typkonvertierung. Zum Beispiel die polymorphe Typkonvertierung zwischen Unterklasse und übergeordneter Klasse.
const_cast bedeutet wörtlich, das const-Attribut zu entfernen.
reinterpreter_cast, interpretiert nur den Typ neu, führt jedoch keine Binärkonvertierung durch.
1. static_cast-Konvertierung
1.Grundlegende Verwendung: static_cast-Ausdruck
2.Verwendungsszenarien :
a. Wird zur Konvertierung von Zeigern oder Referenzen zwischen Basisklassen und abgeleiteten Klassen in der Klassenhierarchie verwendet
Aufwärtskonvertierung (abgeleitete Klasse –> Basisklasse) ist sicher;
Downcast (Basisklasse -> abgeleitete Klasse) ist unsicher, da keine dynamische Typprüfung erfolgt.
b. Wird für die Konvertierung zwischen grundlegenden Datentypen verwendet, z. B. die Konvertierung von int in char. Dies bringt Sicherheitsprobleme mit sich und muss vom Programmierer sichergestellt werden.
c Zieltyp
d. Konvertieren Sie einen beliebigen Ausdruckstyp in einen ungültigen Typ
3. Verwendungsfunktionen
Führen Sie hauptsächlich nicht-polymorphe Konvertierungsoperationen durch Wird verwendet, um die üblichen Konvertierungsoperationen in C zu ersetzen
b. Es wird empfohlen, static_cast für implizite Konvertierungen zu verwenden, um
int n = 6;double d = static_cast<double>(n); // 基本类型转换int *pn = &n;double *d = static_cast<double *>(&n) //无关类型指针转换,编译错误void *p = static_cast<void *>(pn); //任意类型转换成void类型
2. Dynamic_cast-Konvertierung
anzuzeigen und zu ersetzen1.Grundlegende Verwendung: Dynamic_cast-Ausdruck
2.Verwendungsszenarien: Verwenden Sie Dynamic_cast nur beim Konvertieren zwischen abgeleiteten Klassen. Typ -id muss ein Klassenzeiger sein , Klassenreferenz oder void*.
3.Nutzungsfunktionen:
a Die Basisklasse muss eine virtuelle Funktion haben, da Dynamic_cast eine Laufzeittypprüfung ist und Laufzeittypinformationen sowie diese Informationen erfordert Es wird in der virtuellen Funktionstabelle der Klasse gespeichert. Nur eine Klasse, die eine virtuelle Funktion definiert, verfügt über eine virtuelle Funktionstabelle (wenn eine Klasse im Allgemeinen keine virtuelle Funktion hat, möchte der Designer dieser Klasse nicht). es soll eine Basisklasse werden).
b. Bei der Abwärtskonvertierung ist „dynamic_cast“ sicher (wenn die Typen inkonsistent sind, ist der konvertierte Zeiger ein Nullzeiger), während „static_cast“ unsicher ist (wenn die Typen inkonsistent sind, ist der konvertierte Zeiger ein Zeiger mit dem falsche Bedeutung), kann verschiedene Probleme wie Speicher-Trampling und illegalen Zugriff verursachen
1.Grundlegende Verwendung
: const_castexpression2.Verwendungsszenarien
:a Zeiger und zeigt weiterhin auf das ursprüngliche Objekt
b. Die konstante Referenz wird in eine nicht konstante Referenz umgewandelt und zeigt weiterhin auf das ursprüngliche Objekt3. Funktionen verwenden
: a. cosnt_cast Es ist der einzige Konvertierungsoperator unter den vier Typkonvertierungsoperatoren, der mit Konstanten arbeiten kann. Das Entfernen von Konstanten ist eine gefährliche Aktion. Vermeiden Sie daher die Verwendung. Ein spezifisches Szenario ist: Wenn eine Klasse eine Überladung durch const bereitstellt, ruft die nicht konstante Funktion normalerweise const_cast auf, um die Parameter in Konstanten umzuwandeln, ruft dann die konstante Funktion auf, ruft dann das Ergebnis ab und ruft dann const_cast auf, um die Konstanz zu entfernen.class BaseClass {public: int m_iNum; virtual void foo(){};//基类必须有虚函数。保持多台特性才能使用dynamic_cast};class DerivedClass: public BaseClass {public: char *m_szName[100]; void bar(){}; }; BaseClass* pb = new DerivedClass(); DerivedClass *pd1 = static_cast<DerivedClass *>(pb);//子类->父类,静态类型转换,正确但不推荐DerivedClass *pd2 = dynamic_cast<DerivedClass *>(pb);//子类->父类,动态类型转换,正确BaseClass* pb2 = new BaseClass();//父类->子类,静态类型转换,危险!访问子类m_szName成员越界DerivedClass *pd21 = static_cast<DerivedClass *>(pb2);//父类->子类,动态类型转换,安全的。结果是NULLDerivedClass *pd22 = dynamic_cast<DerivedClass *>(pb2);
Grundlegende Verwendung
: reinterpret_castexpression2.Nutzungsszenarien
: Verwenden Sie dieses Konvertierungszeichen nicht als letzten Ausweg, risikoreiche Vorgänge3. Nutzungsfunktionen
:a. reinterpret_cast dient der Neuinterpretation der Daten von Die unterste Ebene weist je nach Plattform eine schlechte Portabilität auf
b. Reinterpret_cast kann Ganzzahlen in Zeiger oder Zeiger in Arrays konvertierenc. reinterpret_cast kann skrupellose Konvertierungen in Zeiger und Referenzen durchführen
int doSomething(){return 0;};//FuncPtr is 一个指向函数的指针,该函数没有参数,返回值类型为 voidtypedef void(*FuncPtr)();//10个FuncPtrs指针的数组 让我们假设你希望(因为某些莫名其妙的原因)把一个指向下面函数的指针存//入funcPtrArray数组:FuncPtr funcPtrArray[10]; funcPtrArray[0] = &doSomething;// 编译错误!类型不匹配,reinterpret_cast可以让编译器以你的方法去看待它们:funcPtrArrayfuncPtrArray[0] = reinterpret_cast<FuncPtr>(&doSomething);//不同函数指针类型之间进行转换
总结:
去const属性用const_cast。
基本类型转换用static_cast。
多态类之间的类型转换用daynamic_cast。
不同类型的指针类型转换用reinterpreter_cast。
相关文章:
相关视频:
Das obige ist der detaillierte Inhalt vonVier Arten von Umwandlungen in C++_Basic-Verwendung und Verwendungsszenarien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.

In der C -Sprache ist der Hauptunterschied zwischen char und wchar_t die Zeichencodierung: char verwendet ASCII oder erweitert ASCII, wchar_t Unicode; char nimmt 1-2 Bytes auf, wchar_t nimmt 2-4 Bytes auf; char ist für englischen Text geeignet. Wchar_t ist für mehrsprachige Text geeignet. char ist weithin unterstützt, wchar_t hängt davon ab, ob der Compiler und das Betriebssystem Unicode unterstützen. char ist in der Charakterbereich begrenzt, WCHAR_T hat einen größeren Charakterbereich und spezielle Funktionen werden für arithmetische Operationen verwendet.
