Zuhause Persönliche Finanzen Bei stark typisierten Enumerationen in C ++ - Dummies

Bei stark typisierten Enumerationen in C ++ - Dummies

Video: BOB 2016 - Gregor Große-Bölting - Elm im produktiven Einsatz 2025

Video: BOB 2016 - Gregor Große-Bölting - Elm im produktiven Einsatz 2025
Anonim

Beim Programmieren dreht sich alles um Lesbarkeit. Es ist schwierig (eigentlich unmöglich), ein Programm zu schreiben und zu pflegen, das man nicht lesen kann. Ein Teil des Lesens einer Quellcode-Auflistung ist das Verstehen, was die in dem Programm verwendeten Zahlen darstellen. Die einfachste Hilfe, die C ++ bietet, ist die allgegenwärtige #define, wie im folgenden oft zitierten Beispiel:

#define PI 3. 141592653589793

Diese Lösung ist für einzelne Werte in Ordnung, obwohl sie unter der Tatsache leidet, dass die #define-Mechanismus ist (streng genommen) kein Teil von C / C ++, da der Präprozessor vor dem Compiler läuft. Als Antwort darauf hat C ++ 2011 ein Constant Expression Konstrukt eingeführt:

constexpr long double PI = 3. 141592653589793;

Das Schlüsselwort constexpr bringt Konstanten in das C ++ - Zelt. Dieser PI hat wie andere C ++ - Variablen einen echten Typ. C ++ kann Fehlermeldungen mit PI erzeugen, die viel sinnvoller sind als solche mit 3. 14159.

Konstante Ausdrücke eignen sich gut für einzelne konstante Werte, aber oft repräsentieren Konstanten Mengen von Dingen anstelle von natürlichen Konstanten, wie im folgenden Beispiel:

#define DC_OR_TERRITORY 0 #define ALABAMA 1 #define ALASKA 2 #define ARKANSAS 3 // … und so weiter …

Vermutlich werden diese Konstanten verwendet, um die Zustände zu identifizieren. ein Index in ein Array von Zustandsobjekten oder irgendwo als Wert in einer Datenbank.

C ++ verfügt seit langem über einen verbesserten Mechanismus zur Definition dieser Konstantentypen - die Enumeration:

enum STATE {DC_OR_TERRITORY, // erhält 0 ALABAMA, // bekommt 1 ALASKA, // bekommt 2 ARKANSAS, // … und bald…};

Das enum-Schlüsselwort führt eine Sequenz von Konstanten ein, die als "Enumeration" bezeichnet wird. In diesem Fall trägt die Enumeration den Namen STATE. Jedem Element dieser Aufzählung wird ein Wert zugewiesen, der bei 0 beginnt und sequentiell um 1 erhöht wird. DC_OR_TERRITORY ist also als 0 definiert, ALABAMA ist als 1 definiert und so weiter. Sie können diese inkrementelle Sequenzierung überschreiben, indem Sie eine Zuweisungsanweisung wie folgt verwenden:

enum ZUSTAND {DC, TERRITORY = 0, ALABAMA, ALASKA, // … und so weiter …};

Diese Version von STATE definiert ein Element DC, das den Wert 0 erhält. Es definiert dann ein neues Element TERRITORY, dem ebenfalls der Wert 0 zugewiesen wird. ALABAMA nimmt wie zuvor mit 1 auf.

In der Praxis kann der Programmierer Enumerationen verwenden, um recht lesbaren Code wie den folgenden zu schreiben:

double taxRate (STATE s) {return taxRatesByState [s];}

Das einzige Problem bei diesem Ansatz ist, dass diese Aufzählung erzeugt keinen neuen Typ (wie Sie vielleicht denken).Tatsächlich ist STATE laut dem Standard nur ein anderer Name für int - und die Konstanten ALABAMA, ALASKA usw. sind alle vom Typ const int.

Der gcc-Compiler stellt tatsächlich eine Enumeration, die auf diese Weise deklariert wurde, ein wenig mehr Autorität bereit, als sie einfach als eine andere Form von int zu bezeichnen. Sie können Funktionen auf Basis eines Enum-Typs tatsächlich überladen:

void fn (STATE s); ungültig fn (int n); fn (ALASKA); // ruft fn (STATE)

auf. Der 2011-Standard ermöglicht es dem Programmierer, mit dem Schlüsselwort enum einen völlig neuen Typ zu erstellen. Da die Ersteller des neuen Standards den vorhandenen Code nicht unterbrechen wollten, erfordert der Standard das Hinzufügen eines zusätzlichen Schlüsselworts, um einen Aufzählungstyp zu definieren, wie im folgenden Beispiel:

Enum-Klasse ZUSTAND {DC, TERRITORY = 0, ALABAMA, ALASKA, // … und so weiter …};

Eine Aufzählungsklasse ist jetzt wie jede andere benutzerdefinierte Klasse ein vollständiger Typ. Das Folgende ist aus zwei Gründen nicht einmal mehr legal:

int s = ALASKA;

Zunächst wird die Konstante ALASKA nur innerhalb des STATE-Namensraums definiert. Daher lautet der Name der Konstante STATE:: ALASKA. Zweitens ist der Typ nicht int, sondern STATE. Sie können einem int keinen Wert vom Typ STATE zuweisen.

STAAT s = ZUSTAND:: ALASKA;

Der Programmierer kann einen STATE in einen int umformatieren, muss dies aber explizit tun - implizite Konvertierungen schneiden ihn nicht mit Aufzählungsklassen ab:

int n = (int) STATE:: ALASKA;

Dieser neue Enum-Typ kann auch auf einem der anderen Zähl-Zahlentypen außer nur int basieren:

Enum-Klasse STATE: char {DC, // … der Rest der Deklaration ist gleich
Bei stark typisierten Enumerationen in C ++ - Dummies

Die Wahl des Herausgebers

Web Marketing: Warum Suchmaschinen existieren - Dummies

Web Marketing: Warum Suchmaschinen existieren - Dummies

Wenn Sie verstehen, warum Suchmaschinen existieren, können sie für Sie in Ihrem Web-Marketing-Geschäft arbeiten. Also, hier ist eine kurze Lektion, warum Suchmaschinen existieren und wie Sie sie nutzen können, um Geld zu verdienen. Suchmaschinen liefern Relevanz. Relevanz bedeutet, dass Besucher auf Suchergebnisse klicken und zufrieden sind mit ...

Was sind Tür- und Informationsseiten? - dummies

Was sind Tür- und Informationsseiten? - dummies

Eine Doorway-Seite wird nur als Zugang von einer Suchmaschine zu Ihrer Website erstellt. Doorway-Seiten werden manchmal als Gateway-Seiten und Geisterseiten bezeichnet. Die Idee besteht darin, hoch optimierte Seiten zu erstellen, die von Suchmaschinen aufgenommen und indiziert werden und die mit etwas Glück gut ranken und somit den Traffic auf eine ...

Was ist eine Weiterleitung bei der Suchmaschinenoptimierung? - Dummies

Was ist eine Weiterleitung bei der Suchmaschinenoptimierung? - Dummies

Eine Weiterleitung ist das automatische Laden einer Seite ohne Benutzereingriff. Sie klicken auf einen Link, um eine Webseite in Ihren Browser zu laden, und innerhalb von Sekunden verschwindet die geladene Seite, und eine neue wird angezeigt. Designer erstellen häufig Seiten für Suchmaschinen - optimierte, schlüsselwortreiche Seiten -, die Besucher auf die ...

Die Wahl des Herausgebers

Behandeln Probleme mit dem Kundenservice über Social Media - Dummies

Behandeln Probleme mit dem Kundenservice über Social Media - Dummies

, Wenn Kunden wissen, dass sie direkt mit ein Geschäft in den sozialen Medien, können sie aus einer beliebigen Anzahl von Gründen mit ihnen in Verbindung treten. Aber sobald sie merken, dass ein Problem mit dem Kundenservice oder einer Produktfrage über einen einzigen Tweet oder Beitrag angesprochen werden kann, ist es wahrscheinlicher, dass sie mit dem Unternehmen Geschäfte machen.

Acht Möglichkeiten, Social Media Feedback zu erhalten - Dummies

Acht Möglichkeiten, Social Media Feedback zu erhalten - Dummies

Die heutige Technologie verändert die Art und Weise, wie wir Geschäfte machen blitzschnell. Auch der Social-Media-Handel bewegt sich blitzschnell, aber durch die Beobachtung von Erwähnungen und Fragen an die Community können Sie einen Eindruck davon bekommen, wie Ihr Markt über bevorstehende Veränderungen denkt. Auch andere Posts können Ihnen helfen, kritisches Feedback aus der Öffentlichkeit zusammenzustellen ...

Manage Social Media Commerce mit HootSuite - dummies

Manage Social Media Commerce mit HootSuite - dummies

HootSuite ist ein Social Media Management System zur Umsetzung von Outreach und Überwachung in sozialen Netzwerken über ein einziges webbasiertes Dashboard. Für Unternehmen wird HootSuite am häufigsten von Social-Media-Teams mit mehreren Agenten verwendet, aber auch viele Einzelanwender mögen es. Wenn Sie auf der Suche nach einer robusten Plattform sind, die alles an einem Ort hält, ...

Die Wahl des Herausgebers

Die 5 Kornsterne der Mittelmeer - Dummies

Die 5 Kornsterne der Mittelmeer - Dummies

Die Mittelmeerdiät ist in der Praxis des Habens begründet ein Vollkorn zu jeder Mahlzeit. Und nein, das bedeutet nicht, eine ganze Platte Vollkornspaghetti mit Fleischsauce zum Abendessen zu essen. Stattdessen machen die Menschen im Mittelmeerraum ihr Getreide zur Beilage oder schaffen durch die Zugabe von magerem Eiweiß mehr Gleichgewicht ...

Strebe nach Gesundheit mit 7 bis 10 Portionen Obst und Gemüse - Schnuller

Strebe nach Gesundheit mit 7 bis 10 Portionen Obst und Gemüse - Schnuller

Der Verzehr von sieben bis zehn Portionen Obst und Gemüse pro Tag, wie sie für die mediterrane Ernährung empfohlen werden, mag sehr viel erscheinen, aber es muss keine so große Herausforderung sein. Wenn Sie nicht die Früchte und das Gemüse lieben, die spezifisch mit der Mittelmeerdiät verbunden sind, ist das okay! Essen Sie jede Art von Obst oder Gemüse, die Sie ...

Die gesundheitlichen Vorteile von mediterranen Kräutern und Gewürzen - Dummies

Die gesundheitlichen Vorteile von mediterranen Kräutern und Gewürzen - Dummies

Sie haben vielleicht gedacht, dass der Oregano und Basilikum in Ihrer Spaghetti-Sauce lieferte nur einen deutlichen italienischen oder mediterranen Geschmack, aber diese kleinen Kräuter sind Pflanzen, was bedeutet, dass sie alle Arten von gesundheitlichen Vorteilen haben, die einen großen Einfluss auf Ihre allgemeine Gesundheit haben können. Einfache Gewürze wie Ingwer und Oregano enthalten Phytochemikalien, ...