Hjem Personlig finansiering Stærkt typede opgørelser i C ++ - dummies

Stærkt typede opgørelser i C ++ - dummies

Video: Fallout 76 Tipps Und Tricks (Deutsch) 10+ Tipps für Einsteiger & Fortgeschrittene [Folge 02] 2024

Video: Fallout 76 Tipps Und Tricks (Deutsch) 10+ Tipps für Einsteiger & Fortgeschrittene [Folge 02] 2024
Anonim

Programmering handler om læsbarhed. Det er svært (faktisk det er umuligt) at skrive og vedligeholde et program, som du ikke kan læse. En del af læsning af en kildekodeoversigt er at forstå, hvad tallene der bruges i programmet repræsenterer. Den mest grundlæggende hjælp, som C ++ giver, er den allestedsnærværende #defin, som i følgende ofte citerede eksempel:

#define PI 3. 141592653589793

Denne løsning er okay for individuelle værdier, selv om det lider af, at #define mekanisme er ikke (strengt taget) en del af C / C ++, da præprocessoren kører før kompilatoren. Som følge heraf introducerede C ++ 2011 en konstant ekspression konstruktion:

constexpr lang dobbelt PI = 3. 141592653589793;

Constexpr-søgeordet bringer konstanter ind i C ++-teltet. Denne PI har en reel type, ligesom andre C ++ variabler. C ++ kan generere fejlmeddelelser med PI, der giver meget mere mening end dem der involverer 3. 14159.

Konstant udtryk er fint for individuelle konstante værdier, men ofte repræsenterer konstanter sæt af ting i stedet for naturlige konstanter som i følgende eksempel:

#define DC_OR_TERRITORY 0 #define ALABAMA 1 #define ALASKA 2 #define ARKANSAS 3 // … og så videre …

Formentlig bruges disse konstanter til at identificere de stater, der måske anvendes som et indeks i en matrix af statlige objekter eller som en værdi i en database et eller andet sted.

C ++ har længe haft en forbedret mekanisme til at definere disse typer af konstanter - opregningen:

enum STATE {DC_OR_TERRITORY, // får 0 ALABAMA, // får 1 ALASKA, // får 2 ARKANSAS, // … og snart…};

Enum-søgeordet introducerer en sekvens af konstanter kaldet en "opregning". I dette tilfælde bærer opregningen navnet STATE. Hvert element i denne opgørelse er tildelt en værdi, der starter ved 0 og øges successivt med 1, så DC_OR_TERRITORY er defineret som 0, ALABAMA er defineret som 1 og så videre. Du kan tilsidesætte denne inkrementelle sekventering ved at bruge en tildelingserklæring som følger:

ENUM STATUS {DC, TERRITORY = 0, ALABAMA, ALASKA, // … og så videre …};

Denne version af STATE definerer et element DC, som er angivet med værdien 0. Det definerer derefter et nyt element TERRITORY, som også tildeles værdien 0. ALABAMA vælger 1, lige som før.

I praksis kan programmereren bruge opgørelser til at skrive helt læsbar kode som følgende:

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

Det eneste problem med denne tilgang er, at denne opregning opretter ikke en ny type (som du måske tror).Faktisk er STATE ifølge standarden bare et andet navn til int - og konstanterne ALABAMA, ALASKA og så videre er alle type const int.

Gcc-kompilatoren giver faktisk en enum deklareret på denne måde lidt mere autoritet end blot at kalde det en anden form for int. Du kan faktisk overbelaste funktioner baseret på en enum type:

void fn (STATE s); void fn (int n); fn (ALASKA); // påberåber fn (STATE)

2011-standarden giver programmereren mulighed for at oprette en helt ny type ved hjælp af enum-søgeordet. Da skaberne af den nye standard ikke ønskede at bryde eksisterende kode, kræver standarden at tilføje et ekstra søgeord for at definere en opregningstype som i følgende eksempel:

enum klasse STATE {DC, TERRITORY = 0, ALABAMA, ALASKA, // … og så videre …};

En opregningsklasse er nu en fuldskala type som enhver anden brugerdefineret klasse. Følgende er ikke engang lovlig af to grunde:

int s = ALASKA;

For det første defineres den konstante ALASKA kun inden for STATE navneområdet. Således er konstantens navn STATE:: ALASKA. For det andet er typen ikke int men STAT. Du kan ikke tildele en værdi af typen STATE til en int.

STATUS s = STAT:: ALASKA;

Programmeren kan omdanne en stat til en int, men hun skal gøre det eksplicit. Foretrukne konverteringer skal ikke skære det med opregningsklasser:

int n = (int) STAT:: ALASKA;

Denne nye enumtype kan også baseres på en af ​​de andre tælleantalstyper udover bare int:

enum klasse STATE: char {DC, // … resten af ​​erklæringen er den samme
Stærkt typede opgørelser i C ++ - dummies

Valg af editor

Routingprotokollvalgskriterier - dummies

Routingprotokollvalgskriterier - dummies

Folk bruger to grundlæggende metoder til klassificering af ruteprotokoller - hvor de bruges og af hvordan de beregner routing. Du kan se, hvordan du vælger protokoller baseret på, hvor du planlægger at bruge dem, måden protokollen håndterer data på, og hvordan din router vælger hvilken protokol der skal bruges, når mere end en ...

Indstilling af Cisco Device Timeouts - dummies

Indstilling af Cisco Device Timeouts - dummies

Uden at indstille timeout-indstillinger for Cisco Device Privileged EXEC-tilstand, dine sessioner forbliver åbne på ubestemt tid. Dette er især farligt for konsolporten. Uden timeout parametre aktiveret, hvis administratoren ikke logger ud, har en indtrenger adgang og ingen problemer får forhøjede tilladelser. For at undgå denne potentielt farlige situation behøver du kun skrive a ...

Router Ethernet-interfacekonfiguration - dummies

Router Ethernet-interfacekonfiguration - dummies

Du starter processen med at konfigurere router Ethernet-grænseflader ved at foretage en fysisk forbindelse til din router. Når du har etableret forbindelsen, kan du fortsætte med den grundlæggende konfiguration af Ethernet-, Fast Ethernet- eller Gigabit Ethernet-forbindelser. Tilslutning til din router For at starte din konfiguration skal du oprette forbindelse til din router og komme ind i ...

Valg af editor

Med fokus på nogle hurtige løsninger til fotofile - dummier

Med fokus på nogle hurtige løsninger til fotofile - dummier

På trods af alle kameraproducenters forsøg på at gør fotografering idiotsikker, vi laver alle stadig mindre end perfekte billeder. Nogle gange er vi problemet - vi er for tætte eller for langt væk, eller kan ikke finde ud af, hvordan du bruger kameraets tåbebeskyttelsesfunktioner. Nogle gange er problemet, at virkeligheden nøjagtigt nægter at overholde vores forventninger: Himlen er ...

Lær at kende dine Manga Studio Layer Typer - Dummies

Lær at kende dine Manga Studio Layer Typer - Dummies

Manga Studio giver et udvalg af lag typer til brug i dit arbejde. Når du lærer at forstå og forstå, hvordan lag fungerer, vil du spekulere på, hvordan du nogensinde har arbejdet uden dem. Her er en introduktion til, hvad Manga Studio har til opbevaring for dig i sin lag lineup: Raster Layer: Dette er det grundlæggende ...

Få dit mobilwebsted tildelt på sociale bogmærker - dummies

Få dit mobilwebsted tildelt på sociale bogmærker - dummies

Populariteten af ​​websider med antallet af stemmer, de får. Resultatet er, at disse websteder er gode ressourcer til folk, der ønsker at holde øje med, hvad der er populært online. De fleste tilbyder speciel software, der gør det nemt for alle at stemme på et websted. Få dit websted opført ...

Valg af editor

Automatisk opdatering af din journal i Outlook 2000 - dummies

Automatisk opdatering af din journal i Outlook 2000 - dummies

Stardat 2001: På Star Trek, Virksomheden gør trofast daglige poster i kaptajnens log. Kaptajnen registrerer oplysninger om de planeter, besætningen har udforsket, udlændinge, de har kæmpet, og de bizarre fænomener, de har observeret ud i det dybe rum, hvor ingen er gået før! Nu er det din tur. Bare ...

Slet og gendan kontakter i Outlook - dummies

Slet og gendan kontakter i Outlook - dummies

Med Outlook, du behøver ikke at rive sider ud af en papir adressebog for at slippe af med en persons oplysninger; bare slet kontakten. Slettede kontakter går til mappen Slette emner i Outlook, indtil næste gang du tømmer mappen Slette elementer, så du kan hente dem derfra, hvis du laver ...