Die UDLs Eingeschlossen in der C ++ Standard Library

Auch wenn Sie derzeit Benutzerdefinierte Literale (UDLs) für einige Grundtypen gibt es viele Situationen, in denen die Entwickler benötigen UDLs für Klassen und erstellen können. In einigen Fällen sind diese Klassen Teil der Standardbibliothek. Es gibt nun einheitliche und standardisierte UDLs einigen Klassen angebracht. Im Folgenden sind einige der wichtigsten Klassen und wie sie verwendet werden.

std :: basic_string

Das std :: basic_string Klasse macht es möglich, mit Sequenzen zu arbeiten verkohlen-wie Objekte. Die Klasse hat derzeit Vorlagen definiert für

  • verkohlen

  • wchar_t

  • char16_t

  • char32_t

Allerdings könnte die Klasse leicht für andere Arten von Zeichen erweitert werden. Darüber hinaus machen die Vorlagen es möglich, Charaktereigenschaften und die Methode zu bestimmen, die die Daten im Speicher zu speichern. Die wesentliche Idee hinter dem basic_string ist es möglich zu machen, eine Vielzahl von Zeichentypen innerhalb einer Zeichenklasse aufzunehmen Codierung zu vereinfachen.

In C ++ 14 umfasst der Standard Library Einbau-wörtliche Unterstützung für basic_string. Alles, was Sie tun müssen, ist das hinzufügen s Suffix in einen String zu erstellen. Allerdings ist es wichtig, eine Vorstellung davon zu bekommen, wie das alles hinter den Kulissen arbeitet. Das BasicString Beispiel zeigt drei Techniken für die Schaffung eines basic_string Objekt.

#einschließen #einschließen using namespace std-String-Operator "" _s (const char * str, unsigned len) {return String {str, len} -} int main () {basic_string StdString = "Dies ist ein Standard-String." - Auto AutoString = ". Dies ist eine Auto-String" _ s - // Kommentar entfernen, wenn Ihr Compiler unterstützt C ++ 14.//auto UDLString = ". Dies ist eine UDL Zeichenfolge" s- cout lt; lt; StdString lt; lt; endl lt; lt; typeid (StdString) .name () lt; lt; Endl-cout lt; lt; AutoString lt; lt; endl lt; lt; typeid (AutoString) .name () lt; lt; Endl - // Kommentar entfernen, wenn Ihr Compiler C ++ 14.//cout unterstützt lt; lt; UDLString lt; lt; endl lt; lt; typeid (UDLString) .name () lt; lt; Endl-return 0-}

Dieses Beispiel führt drei wesentliche Ebenen der Umwandlung, so dass Sie das Fortschreiten von einem zum anderen zu sehen. Im ersten Fall, sehen Sie die einfache Methode für eine einfache Erstellung von basic_string Objekt, StdString.

Wie Sie sehen können, funktioniert es wie nur andere Vorlage. Der zweite Fall stützt sich auf eine Art Operator Definition C ++ 11, um das UDL emulieren, die als Teil von C ++ 14 enthalten ist, brauchen Sie wirklich jetzt zu wissen ist, dass der Bediener es möglich macht, eine Verknüpfung zu verwenden, bei der Erstellung von Basic_Schnur Objekte.

Der dritte Fall zeigt die C ++ 14-Version des gleichen _s Definition, aber dieser wird direkt in die Standardbibliothek gebaut, so dass Sie nichts tun müssen, um besondere, es zu benutzen. In allen drei Fällen erstellen Sie die gleiche basic_string Objekt-Typ, aber die Technik jedes Mal verschieden ist. Wenn Sie dieses Beispiel ausführen, sehen Sie die folgende Ausgabe:

Dies ist ein Standard string.SsThis ist ein Auto-string.SsThis ist ein UDL string.Ss

Diese Ausgabe zeigt die verstümmelte Form der Name() Funktionsausgang. Die Tatsache, dass alle drei Saiten sind die gleichen sagt Ihnen, sie den gleichen Objekttyp sind. Wenn Sie die unmangled Namen sehen möchten, können Sie mit dem Demangle () Funktion.

std :: Komplex

Sie können oder erinnern sich vielleicht nicht komplexe Zahlen aus der Schule. EIN komplexe Zahl besteht aus einer reellen Zahl und eine imaginäre Zahl, die miteinander gepaart sind. Real-World für komplexe Zahlen verwendet sind:

  • Elektrotechnik

  • Flüssigkeitsdynamik

  • Quantenmechanik

  • Computergrafik

  • Dynamische Systeme

Es gibt auch andere Verwendungen für komplexe Zahlen, auch, aber diese Liste sollte Ihnen ein paar Ideen. In der Regel in jeder dieser Disziplinen, wenn Sie nicht beteiligt sind, werden Sie wahrscheinlich nicht immer komplexer Zahlen begegnen. Allerdings sieht der Standard Library volle Unterstützung für komplexe Zahlen, nur für den Fall Sie sie brauchen.

Wie bei der BasicString Beispiel Dieses Beispiel zeigt den Verlauf von einer Standard-Erklärung an den C ++ 14-Suffix. Das Komplexe Zahl Beispiel zeigt alle drei Stufen, so können Sie sehen, wie sowohl die C ++ 14-Suffix und die C ++ 11 UDL Formen der Arbeit.

#einschließen #einschließen using namespace std-Komplex Operator "" _i (long double Value) {return-Komplex(0, Value) -} int main () {Komplex StdComplex (0, 3,14) -auto Autocomplex = 3.14_i - // Kommentar entfernen, wenn Ihr Compiler C ++ unterstützt 14.//auto UDLComplex = 3.14i-cout lt; lt; StdComplex.real () lt; lt; "" lt; lt; StdComplex.imag () lt; lt; Endl-cout lt; lt; AutoComplex.real () lt; lt; "" lt; lt; AutoComplex.imag () lt; lt; Endl - // Kommentar entfernen, wenn Ihr Compiler C ++ 14.//cout unterstützt lt; lt; UDLComplex.real () lt; lt; "" lt; lt; UDLComplex.imag () lt; lt; Endl-return 0-}

Das Beispiel erklärt Variablen aller drei Typen und weist Werte zu ihnen. Es zeigt dann sowohl die Real- und Imaginärteile der Zahl. Wenn Sie dieses Beispiel ausführen, sehen Sie die folgende Ausgabe:

0 3.140 3.140 3.14

Sie können drei Arten von komplexen Zahlen erstellen. Die folgende Liste zeigt die Suffixe für jede Art verwendet:

  • ich: doppelt

  • ob: schweben

  • il: long double

std :: Chrono :: Dauer

Das Chrono :: Dauer Klasse dient dazu, den Lauf der Zeit zu markieren. Sie beantwortet die Frage, wie viel Zeit zwischen zwei Ereignissen vergangen ist. Entwickler verwenden es für alle Arten von zeitbezogenen Zwecken.

EIN Chrono :: Dauer Objekt stützt sich auf eine zweite als Standarddauer zwischen Zecken. EIN Tick ist eine einzige Dauer Intervallzeit. Mit dem Standard-Setup, jeder Tick entspricht einer Sekunde. Sie können jedoch die Verwendung Verhältnis Objekt einen neuen Tick Dauer zu definieren. Wenn Sie zum Beispiel definieren ratiolt; 60> jeder Tick dauert eine Minute. Ebenso definieren ratiolt; 1, 5> setzt jeder tick ein Fünftel einer Sekunde dauern.

Es ist auch möglich, ein Intervall zu einem anderen wechseln mit duration_cast entweder mit einem Standardintervall, wie beispielsweise Chrono :: Sekunden, oder jedes Intervall typedef dass Sie erstellen möchten. Beispielsweise, typedef chrono :: Dauer> fifths- definiert ein Intervall genannt Fünftel.

Es gibt viel mehr zu etwa mit dem reden Chrono :: Dauer Klasse, aber Sie haben jetzt genug Informationen mit der Arbeit Dauer Beispiel gezeigt. Wie bei den vorherigen Beispielen zeigt dieses eine Progression von einer variablen Definition direkt, um eine benutzerdefinierte UDL verwenden, und schließlich die integrierte Unterstützung, die C ++ 14 zur Verfügung stellt.

#einschließen #einschließen using namespace std-Chrono :: Dauer Operator "" _m (unsigned long long-Wert) {return chrono :: Dauer<60>> (Value) -} int main () {// ein Intervall von 20 minutes.chrono definieren :: Dauer<60>> StdTime (20) -auto AUTOTIME (20_m) - // Kommentar entfernen, wenn der Compiler C ++ 14.//auto UDLTime (20min) unterstützt - // Ausgabe der Zeit in seconds.cout lt; lt; Chrono :: duration_cast (StdTime) .count () lt; lt; Endl-cout lt; lt; Chrono :: duration_cast (AUTOTIME) .count () lt; lt; Endl - // Kommentar entfernen, wenn Ihr Compiler C ++ 14.//cout unterstützt lt; lt; Chrono :: duration_cast (UDLTime) .count () // lt; lt; Endl-return 0-}

Das Beispiel zeigt einige Merkmale der Chrono :: Dauer Klasse. Es ist jedoch konzentriert sich wieder auf die Progression von der Definition der Variablen mit der Hand auf eine Verknüpfung mit der Aufgabe zu erfüllen. Beachten Sie, dass die UDL auf einen Integer-Wert in diesem Fall beruht, sondern als ein Floating-Point-Typ. Der Wert von 20 Minuten auf wenige Sekunden für die Ausgabe umgewandelt. Als Ergebnis sehen Sie diese Werte, wenn Sie die Anwendung ausführen:

120012001200

Die Standardbibliothek unterstützt eine Reihe von Endungen für Chrono :: Dauer wenn Sie C ++ verwenden 14. Die folgende Liste zeigt die einzelnen Suffixe und sagt Ihnen, was sie bedeuten:

  • h: Stunden

  • min: Protokoll

  • s: Sekunden

  • Frau: Millisekunden

  • uns: Mikrosekunden

  • ns: Nanosekunden

Menü