Implizite Typkonvertierung in C++ bezieht sich auf die automatische Konvertierung eines Compilers vom „Konstruktorparametertyp“ in den „Klassentyp“. Die implizite Klassentypkonvertierung birgt Risiken, die zu temporären Variablen der Klasse führen, die nach Abschluss der Operation verschwinden. Wir haben ein Objekt erstellt, das nach Abschluss des Tests verworfen wurde.
Implizite C++-Klassentypkonvertierung
In „C++ Primer“ erwähnt :
„Ein Konstruktor, der mit einem einzelnen Parameter aufgerufen werden kann, definiert eine implizite Konvertierung vom Parametertyp zum Klassentyp.“
Sollte es sein Beachten Sie hier, dass „kann mit einem einzigen formalen Parameter aufgerufen werden“ nicht bedeutet, dass der Konstruktor nur einen formalen Parameter haben kann, sondern dass er mehrere formale Parameter haben kann, diese formalen Parameter jedoch standardmäßige tatsächliche Parameter haben.
Was ist also „implizite Konvertierung“? Wie im obigen Satz erwähnt, ist die automatische Konvertierung eines Compilers vom Konstruktorparametertyp in den Klassentyp.
Schauen wir uns den Code an:
#include "stdafx.h" #include <string> #include <iostream> using namespace std ; class BOOK //定义了一个书类 { private: string _bookISBN ; //书的ISBN号 float _price ; //书的价格 public: //定义了一个成员函数,这个函数即是那个“期待一个实参为类类型的函数” //这个函数用于比较两本书的ISBN号是否相同 bool isSameISBN(const BOOK & other ){ return other._bookISBN==_bookISBN; } //类的构造函数,即那个“能够用一个参数进行调用的构造函数”(虽然它有两个形参,但其中一个有默认实参,只用一个参数也能进行调用) BOOK(string ISBN,float price=0.0f):_bookISBN(ISBN),_price(price){} }; int main() { BOOK A("A-A-A"); BOOK B("B-B-B"); cout<<A.isSameISBN(B)<<endl; //正经地进行比较,无需发生转换 cout<<A.isSameISBN(string("A-A-A"))<<endl; //此处即发生一个隐式转换:string类型-->BOOK类型,借助BOOK的构造函数进行转换,以满足isSameISBN函数的参数期待。 cout<<A.isSameISBN(BOOK("A-A-A"))<<endl; //显式创建临时对象,也即是编译器干的事情。 system("pause"); }
Wie Sie im Code sehen können, erwartet die Funktion isSameISBN einen BOOK-Klassentypparameter, wir haben jedoch einen Stringtyp Give übergeben es dazu, das ist nicht, was es will! Glücklicherweise gibt es in der BOOK-Klasse einen Konstruktor, der mit einem String-Typ-Aktualparameter aufgerufen wird. Der Compiler ruft diesen Konstruktor auf, konvertiert den String-Typ implizit in den BOOK-Typ (erstellt ein temporäres BOOK-Objekt) und übergibt ihn dann isSameISBN-Funktion.
Implizite Klassentypkonvertierung birgt immer noch Risiken. Wie oben erwähnt, erhält die implizite Konvertierung temporäre Variablen der Klasse und verschwindet nach Abschluss des Vorgangs. Wir haben ein Objekt erstellt, das nach Abschluss des Tests verworfen wurde.
Wir können diese Konvertierung durch explizite Deklaration unterdrücken:
explicit BOOK(string ISBN,float price=0.0f):_bookISBN(ISBN),_price(price){}
Das explizite Schlüsselwort kann nur für Konstruktordeklarationen innerhalb der Klasse verwendet werden. Auf diese Weise kann der BOOK-Klassenkonstruktor nicht verwendet werden Da das Objekt Wird implizit erstellt, erscheint beim Kompilieren des obigen Codes die folgende Eingabeaufforderung:
Jetzt kann der Benutzer nur noch eine Anzeigetypkonvertierung durchführen und explizit temporäre Objekte erstellen.
Zusammenfassend:
kann mit einem tatsächlichen Parameter aufgerufen werden, was nicht bedeutet, dass der Konstruktor nur einen formalen Parameter haben kann.
Die implizite Klassentypkonvertierung kann leicht zu Fehlern führen, es sei denn, Sie haben einen klaren Grund für die Verwendung der impliziten Klassentypkonvertierung. Andernfalls deklarieren Sie alle Konstruktoren, die mit einem Argument aufgerufen werden können, als explizit.
explicit kann nur zum Deklarieren von Konstruktoren innerhalb einer Klasse verwendet werden. Obwohl die durch die implizite Typkonvertierung verursachten Probleme vermieden werden können, muss der Benutzer explizit temporäre Objekte erstellen (was Anforderungen an den Benutzer stellt).
Empfohlen: „C++-Tutorial“
Das obige ist der detaillierte Inhalt vonWas ist die implizite Typkonvertierung in C++?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C# und .NET passen sich durch kontinuierliche Aktualisierungen und Optimierungen an die Bedürfnisse neuer Technologien an. 1) C# 9.0 und .NET5 Führen Sie den Datensatztyp und die Leistungsoptimierung ein. 2) .NETCORE verbessert die native und containerische Unterstützung von Cloud. 3) ASP.NetCore integriert sich in moderne Webtechnologien. 4) ML.NET unterstützt maschinelles Lernen und künstliche Intelligenz. 5) Asynchrone Programmierung und Best Practices verbessern die Leistung.

C#.NetissoBableFoREenterPrise-Level Applications-WithemicrosoftCosystemDuetoitsStrongtyPing, Richlibrary, Androbustperformance.

Der Programmierungsprozess von C# in .NET enthält die folgenden Schritte: 1) Schreiben von C# Code, 2) Kompilieren in eine mittlere Sprache (IL) und 3), die durch die .NET -Laufzeit (CLR) ausführt. Die Vorteile von C# in .NET sind die moderne Syntax, das leistungsstarke Typsystem und die enge Integration in das .NET -Framework, das für verschiedene Entwicklungsszenarien geeignet ist, von Desktop -Anwendungen bis hin zu Webdiensten.

C# ist eine moderne, objektorientierte Programmiersprache, die von Microsoft und als Teil des .NET-Frameworks entwickelt wurde. 1.C# unterstützt die objektorientierte Programmierung (OOP), einschließlich Einkapselung, Vererbung und Polymorphismus. 2. Asynchrones Programmieren in C# wird über Async implementiert und wartet auf Schlüsselwörter, um die Reaktionsfähigkeit der Anwendungen zu verbessern. 3.. Verwenden Sie LINQ, um Datensammlungen präzise zu verarbeiten. 4. Häufige Fehler umfassen Null-Referenzausnahmen und Indexausnahmen außerhalb des Bereichs. Zu den Debugging -Fähigkeiten gehört die Verwendung eines Debuggers und Ausnahmeberechnung. 5. Leistungsoptimierung umfasst die Verwendung von StringBuilder und das Vermeiden von unnötigem Packung und Unboxing.

Die Teststrategien für C#.NET-Anwendungen umfassen Unit-Tests, Integrationstests und End-to-End-Tests. 1. Unit -Test stellt sicher, dass die Mindesteinheit des Codes unter Verwendung des Frameworks MStest, Nunit oder Xunit unabhängig funktioniert. 2. Integrierte Tests überprüfen die Funktionen mehrerer Einheiten kombinierter, häufig verwendeten simulierten Daten und externen Diensten. 3. End-to-End-Tests simuliert den vollständigen Betriebsprozess des Benutzers, und Selen wird normalerweise für automatisierte Tests verwendet.

Das Interview mit C# Senior Developer erfordert das Mastering von Kernwissen wie asynchrones Programmieren, LINQ und interne Arbeitsprinzipien von .NET -Frameworks. 1. Asynchrones Programmieren vereinfacht die Operationen durch Async und wartet auf die Verbesserung der Anwendungsreaktionsfähigkeit. 2.LinQ betreibt Daten im SQL -Stil und achtet auf die Leistung. 3. Die CLR des Net -Frameworks verwaltet den Speicher, und die Müllsammlung muss mit Vorsicht verwendet werden.

C#.NET -Interviewfragen und Antworten umfassen Grundkenntnisse, Kernkonzepte und erweiterte Nutzung. 1) Grundkenntnisse: C# ist eine von Microsoft entwickelte objektorientierte Sprache und wird hauptsächlich im .NET-Framework verwendet. 2) Kernkonzepte: Delegation und Ereignisse ermöglichen dynamische Bindungsmethoden, und LINQ bietet leistungsstarke Abfragefunktionen. 3) Erweiterte Verwendung: Asynchrone Programmierung verbessert die Reaktionsfähigkeit und Expressionsbäume werden für die dynamische Codekonstruktion verwendet.


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

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Dreamweaver CS6
Visuelle Webentwicklungstools

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software