Heim Backend-Entwicklung C#.Net-Tutorial Vier Arten von Umwandlungen in C++_Basic-Verwendung und Verwendungsszenarien

Vier Arten von Umwandlungen in C++_Basic-Verwendung und Verwendungsszenarien

Aug 01, 2018 pm 02:20 PM

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类型
Nach dem Login kopieren

2. Dynamic_cast-Konvertierung

anzuzeigen und zu ersetzen

 1.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_castexpression

 2.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 Objekt

3. 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);
Nach dem Login kopieren
4. reinterpret_cast-Konvertierung

 1.

Grundlegende Verwendung

: reinterpret_castexpression

2.Nutzungsszenarien

: Verwenden Sie dieses Konvertierungszeichen nicht als letzten Ausweg, risikoreiche Vorgänge

3. 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 konvertieren

c. 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);//不同函数指针类型之间进行转换
Nach dem Login kopieren

总结:

去const属性用const_cast。

基本类型转换用static_cast。

多态类之间的类型转换用daynamic_cast。

不同类型的指针类型转换用reinterpreter_cast。

相关文章:

C++ 的强制类型转换

【c#教程】C# 类型转换

相关视频:

PHP数据类型转换之自动类型转换

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie man verschiedene Symbole in der C -Sprache verwendet Wie man verschiedene Symbole in der C -Sprache verwendet Apr 03, 2025 pm 04:48 PM

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.

So verwenden Sie char Array in C -Sprache So verwenden Sie char Array in C -Sprache Apr 03, 2025 pm 03:24 PM

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 asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

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.

Was ist die Rolle von CHAR in C -Saiten? Was ist die Rolle von CHAR in C -Saiten? Apr 03, 2025 pm 03:15 PM

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.

Wie man mit Sonderfiguren in der C -Sprache umgeht Wie man mit Sonderfiguren in der C -Sprache umgeht Apr 03, 2025 pm 03:18 PM

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.

Wie man CHO in C -Sprache umwandelt Wie man CHO in C -Sprache umwandelt Apr 03, 2025 pm 03:21 PM

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.

Was ist die Funktion der C -Sprachsumme? Was ist die Funktion der C -Sprachsumme? Apr 03, 2025 pm 02:21 PM

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.

Der Unterschied zwischen char und wchar_t in der C -Sprache Der Unterschied zwischen char und wchar_t in der C -Sprache Apr 03, 2025 pm 03:09 PM

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.

See all articles