Komponentenerweiterungen für Laufzeitplattformen
Visual C++ bietet Spracherweiterungen zur Unterstützung der Programmierung mit Laufzeitplattformen. Mit Komponentenerweiterungen für Visual C++ (C++/CX) können Sie Windows Store-Apps und -Komponenten programmieren, die in systemeigenen Code kompilieren. Obwohl Sie Windows Store-Apps erstellen können, indem Sie direkt für die Windows-Runtime-COM-Schnittstellen programmieren, können Sie mithilfe von C++/CX mit Konstruktoren, Ausnahmen und anderen Techniken moderner C++-Programmierung arbeiten. Um C++-Programmierung in einer verwalteten Ausführungsumgebung auf der .NET-Plattform zu aktivieren, können Sie C++/CLI verwenden.
Zwei Laufzeiten, ein Satz von Erweiterungen
C++/CX ist eine Teilmenge von C++/CLI. Für Erweiterungen, die von C++/CX und von C++/CLI unterstützt werden, hängt die Semantik davon ab, ob Sie die Common Language Runtime (CLR) oder die Windows-Runtime als Ziel verwenden. Um die App für die Ausführung auf der Windows-Runtime zu kompilieren, geben Sie die /ZW-Compileroption an. Um sie für die Ausführung auf der CLR zu kompilieren, geben Sie die /clr-Compileroption an. Diese Schalter werden automatisch festgelegt, wenn Sie Visual Studio zur Erstellung eines Projekt verwenden.
Weitere Informationen zum Erstellen von Windows Store-Apps in C++ finden Sie unter Roadmap for Windows Store apps using C++.
C++/CLI erweitert den C++-ISO/ANSI-Standard und wird unter dem C++/CLI-ECMA-Standard definiert. Weitere Informationen finden Sie unter .NET-Programmierung in Visual C++.
Datentyp-Schlüsselworte
Die Spracherweiterungen schließen Aggregatschlüsselwörter ein, bei denen es sich um Schlüsselwörter handelt, die aus zwei durch Leerraum getrennte Token bestehen. Die Token haben möglicherweise eine bestimmte Bedeutung, wenn sie einzeln verwendet werden, und eine andere Bedeutung, wenn sie zusammen verwendet werden. Beispielsweise ist das Wort "ref" ein normaler Bezeichner und das Wort "class" ein Schlüsselwort, das eine systemeigene Klasse deklariert. Wenn diese Wörter jedoch zu ref class kombiniert werden, deklariert das resultierende Aggregatschlüsselwort eine Entität, die als eine Laufzeitklasse bezeichnet wird.
Die Erweiterungen enthalten auch kontextbezogene Schlüsselwörter. Ein Schlüsselwort wird abhängig von der Art der Anweisung, in der es enthalten ist, und seiner Platzierung in dieser Anweisung als kontextbezogen behandelt. Beispielsweise kann das Token "property" ein Bezeichner sein oder es kann eine spezielle Art eines öffentlichen Klassenmembers deklarieren.
In der folgenden Tabelle sind Schlüsselwörter in der C++-Spracherweiterung aufgeführt.
Schlüsselwort |
Kontextbezogen |
Zweck |
Verweis |
---|---|---|---|
ref class ref struct |
nein |
Deklariert eine Klasse. |
|
value class value struct |
nein |
Deklariert eine Wertklasse. |
|
interface class interface struct |
nein |
Deklariert eine Schnittstelle. |
|
enum class enum struct |
nein |
Deklariert eine Enumeration. |
|
property |
ja |
Deklariert eine Eigenschaft. |
|
delegate |
ja |
Deklariert einen Delegaten. |
|
event |
ja |
Deklariert ein Ereignis. |
Überschreibungsspezifizierer
Sie können die folgenden Schlüsselwörter verwenden, um das Überschreibungsverhalten für Ableitung zu qualifizieren. Obwohl das new-Schlüsselwort keine Erweiterung von C++ ist, wird es hier aufgeführt, da es in einem zusätzlichen Kontext verwendet werden kann. Einige Bezeichner sind auch für die systemeigene Programmierung gültig. Weitere Informationen finden Sie unter Gewusst wie: Deklarieren Sie Überschreibungs-Spezifizierer in systemeigenen Kompilierungen.
Schlüsselwort |
Kontextbezogen |
Zweck |
Verweis |
---|---|---|---|
abstract |
ja |
Gibt an, dass Funktionen oder Klassen abstrakt sind. |
|
new |
nein |
Gibt an, dass eine Funktion keine Überschreibung einer Basisklassenversion ist. |
new (neuer Slot in vtable) (Komponentenerweiterungen für C++) |
override |
ja |
Gibt an, dass eine Methode eine Überschreibung einer Basisklassenversion sein muss. |
|
sealed |
ja |
Verhindert, dass Klassen als Basisklassen verwendet werden. |
Schlüsselwörter für Generika
Die folgenden Schlüsselwörter wurden hinzugefügt, um generische Typen zu unterstützen. Weitere Informationen finden Sie unter Generika (Komponentenerweiterungen für C++).
Schlüsselwort |
Kontextbezogen |
Zweck |
---|---|---|
generic |
nein |
Definiert einen generischen Typ. |
where |
ja |
Gibt die Einschränkungen an, die für einen generischen Typparameter angewendet werden. |
Sonstige Schlüsselwörter
Die folgenden Schlüsselwörter wurden den C++-Erweiterungen hinzugefügt.
Schlüsselwort |
Kontextbezogen |
Zweck |
Verweis |
---|---|---|---|
finally |
ja |
Gibt das Standardausnahmebehandlungsverhalten an. |
|
for each, in |
nein |
Listet die Elemente einer Auflistung auf. |
|
gcnew |
nein |
Ordnet Typen auf dem Heap der Garbage Collection zu. Wird anstelle von new und delete verwendet. |
|
ref new |
ja |
Ordnet einen Windows-Runtime-Typ zu. Wird anstelle von new und delete verwendet. |
|
initonly |
ja |
Gibt an, dass ein Member nur in der Deklaration oder in einem statischen Konstruktor initialisiert werden kann. |
|
literal |
ja |
Erstellt eine literale Variable. |
|
nullptr |
nein |
Gibt an, dass ein Handle oder ein Zeiger nicht auf ein Objekt zeigt. |
Vorlagenkonstrukte
Die folgenden Sprachkonstrukte werden nicht als Schlüsselwörter, sondern als Vorlagen implementiert. Wenn Sie die /ZW-Compileroption angeben, werden sie im lang-Namespace definiert. Wenn Sie die /clr-Compileroption angeben, werden sie im cli-Namespace definiert.
Schlüsselwort |
Zweck |
Verweis |
---|---|---|
array |
Deklariert einen Array. |
|
interior_ptr |
(Nur CLR:) Zeigt auf Daten in einem Referenztyp. |
|
pin_ptr |
(Nur CLR:) Zeigt auf CLR-Referenztypen, um das Garbage Collection-System vorübergehend zu unterdrücken. |
|
safe_cast |
Bestimmt die optimale Umwandlungsmethode für einen Laufzeittyp und führt diese aus. |
|
typeid |
(Nur CLR:) Ruft ein Type-Objekt ab, das den angegebenen Typ oder das angegebene Objekt beschreibt. |
Deklaratoren
Die folgenden Typdeklaratoren weisen die Laufzeit an, die Lebensdauer und das Löschen von zugeordneten Objekten automatisch zu verwalten.
Operator |
Zweck |
Verweis |
---|---|---|
^ |
Deklariert ein Handle zu einem Objekt, d. h. einen Zeiger auf ein Windows-Runtime- oder CLR-Objekt, der automatisch gelöscht wird, wenn er nicht mehr verwendet werden kann. |
|
% |
Deklariert einen Nachverfolgungsverweis, d. h., einen Verweis auf ein Windows-Runtime- oder CLR-Objekt, der automatisch gelöscht wird, wenn er nicht mehr verwendet werden kann. |
Nachverfolgungsverweisoperator (Komponentenerweiterungen für C++) |
Zusätzliche Konstrukte und verwandte Themen
In diesem Abschnitt werden weitere Programmierungskonstrukte sowie Themen aufgeführt, die die CLR betreffen.
Thema |
Beschreibung |
---|---|
(Windows-Runtime und CLR:) Ermöglicht die Verwendung von Schlüsselwörtern als Bezeichner. |
|
(Windows-Runtime und CLR:) Ermöglicht es einer Funktion, eine variable Anzahl von Argumenten zu akzeptieren. |
|
.NET Framework-Entsprechungen der systemeigenen Typen in C++ (C++/CLI) |
Listet die CLR-Typen auf, die anstelle von ganzzahligen C++-Typen verwendet werden. |
Modifizierer appdomain__declspec |
__declspec-Modifizierer, für den es erforderlich ist, dass anwendungsdomänenspezifische statische und globale Variablen vorhanden sind. |
Beschreibt, wie Umwandlungen im C-Stil interpretiert werden. |
|
__clrcall-Aufrufkonvention |
Gibt die CLR-kompatible Aufrufkonvention an. |
__cplusplus_cli |
|
Beschreibt, wie eigene CLR-Attribute definiert werden. |
|
Stellt eine Übersicht über die Ausnahmebehandlung bereit. |
|
Explizite Überschreibungen (Komponentenerweiterungen für C++) |
Zeigt, wie Memberfunktionen beliebige Member überschreiben können. |
Erläutert, wie eine Clientassembly auf alle Typen in einer Assemblykomponente zugreifen kann. |
|
Veranschaulicht die Bedingungen, unter denen Werttypen geschachtelt werden. |
|
Compilerunterstützung für Typmerkmale (Komponentenerweiterungen für C++) |
Erläutert, wie Eigenschaften von Typen zur Kompilierzeit erkannt werden. |
managed, unmanaged-Pragmas |
Veranschaulicht, wie verwaltete und nicht verwaltete Funktionen in demselben Modul zusammen verwendet werden können. |
Modifizierer Prozess__declspec |
__declspec-Modifizierer, für den es erforderlich ist, dass prozessspezifische statische und globale Variablen vorhanden sind. |
Zeigt die CLR-Version von Informationen zum Laufzeittyp. |
|
Erläutert die Compilerkonvertierung von Zeichenfolgenliteralen zu String. |
|
Ermöglicht das Verschieben eines Typs aus einer bereits bereitgestellten Assembly in eine andere Assembly, sodass Clientcode nicht neu kompiliert werden muss. |
|
Benutzerdefinierte Attribute (Komponentenerweiterungen für C++) |
Veranschaulicht benutzerdefinierte Attribute. |
Importiert externe Assemblys. |
|
Erläutert die XML-basierte Codedokumentation mithilfe von /doc (Verarbeiten von Dokumentationskommentaren) (C/C++) |