Mekkora az enum mérete?


Legjobb válasz

Feltételezve, hogy az (E) méretet akarja megadni, ahol E egy enum típus:

Ez attól függ az alapul szolgáló típuson. Normális esetben ez int, de ha az enum class -t használja, akkor ezt megadhatja a C ++ nyelven. Akárhogy is, a sizeof-nak meg kell adnia a megfelelő értéket.

Nincs normál vagy beépített módszer a felsorolók számának meghatározására C-ben vagy C ++. Ha fegyelmezett vagy és nincs hiánya, használhatsz valami ilyesmit: az első kivételével minden felsorolószámnak magasabbnak kell lennie, mint elődje:

enum Days { Monday, Tuesday, … Saturday, LAST };

Itt a napok száma megegyezik a LAST int értékével, de természetesen biztosítania kell, hogy a LAST valóban utolsó. A fordító ezt nem tudja kikényszeríteni.

Ha nem nulláról indul, de valamilyen oknál fogva mondjuk 7-től indul, akkor kiszámíthatja az UTOLSÓ – hétfő:

enum Days { Monday = 7, Tuesday, … Saturday, LAST };

int numDays = LAST - Monday; // still yields 7

Itt győződjön meg arról is, hogy Első a hétfő .

Válasz

Enum (röviden felsorolás ) a számok valamiféle jelentésének hozzáadására szolgáló technika. A számítógépek csak számokban dolgoznak, és a felsorolások úgy tesznek, mintha ezek a számok inkább minőséget, mint mennyiséget írnának le.

A felsorolások közül az egyik leghíresebb a szöveg tárolásához használt kódolás. Az ötlet az, hogy mindegyik betűhöz hozzárendelünk egy számot, nagyjából úgy, hogy egy gyerekeknek szóló könyv numerikus kódot írjon. Az általunk használt kód körülbelül így néz ki:

A = 65, B = 66, C = 67, … Z = 90; a = 97, b = 98, c = 99, … z = 122.

Ha Windows rendszerű gépet használ, próbálja meg ezt: Kattintson valahová, ahová beírhatja a szöveget. Tartsa lenyomva az ALT billentyűt gombot, és miközben lenyomva tartja, írja be a számok egyikére a számok egyikét. Például [Nyomja meg és tartsa lenyomva az Alt] 65 [Engedje Alt] gombot. Megjelenik az A betű; ez egy nagyon régi módszer a karakterek közvetlen beírásához. numerikus kódjuk. Ez főleg akkor hasznos, ha nemzetközi karaktereket ír be, ha nincs telepítve a megfelelő billentyűzet: Çüéâäàåçê … ezeket kapom az Alt + 128, 129, 130 stb-től. a mögöttes karakterek felsorolása.

Nincs semmi varázslat abban, ha a 65-ös számot választottuk A-ra; csak az a fontos, hogy következetesek legyünk. A felsorolás tehát egy módszer a számok hozzárendeléséhez nem numerikus ötletekhez, és a kód kissé megkönnyítéséhez.

Ne feledje, hogy hasznos , hogy a karakterek sorrendje megfelel az ábécé sorrendjének (legalábbis angolul). Ez megkönnyíti a karakterláncok írását, amelyek ábécé sorrendbe rendezik a dolgokat, mert meg lehet csalni, és összehasonlításokat használhat a numerikus értékre. Más nyelveken kissé bonyolultabbá válik, mert a karakterekhez rendelt számértékek nem mindig egyeznek az ábécé sorrendjével.

Egy másik felsorolási példához tegyük fel, hogy írunk egy programot, hogy foglalkozzunk vele hálózati kapcsolatokkal. A hálózati kapcsolatoknak lehet néhány különböző állapota; lehetnek hallgatók , nyitottak , bezárva , vagy hiba állapotban. Ezek minőségek, nem mennyiségek, és hogy mire szolgál egy felsorolás:

enum ConnectionState {

NCON\_LISTEN,

NCON\_OPEN,

NCON\_CLOSED,

NCON\_ERROR

};

Véleményem szerint általában jobb gyakorlat, ha az enumokat egy osztálydefinícióba ágyazzák. Ezzel kihagyhatja az előtagokat:

class Connection {

public:

enum State {

LISTEN, OPEN, CLOSED, ERROR

};

};

A típus Connection::State, az értékek pedig Connection::LISTEN, Connection::OPEN stb. Szerintem ez egyértelműbb.

Példája a numerikus és az enum értékek keverésére nem ” nincs értelme; az összes felsorolt ​​értéknek betűvel kell kezdődnie. Általában nem használhat olyan számot, ahol számítás várható; A C ++ fordítók különféle típusokként kezelik az inteket és az enumokat. Nem tilos értelmes számokat társítani az enum értékekhez (vegye figyelembe, hogy ez mennyire hasznos az ábécé sorrendjében), de ez nem az alapértelmezett gyakorlat.

Kimenetet adhat vagy beírhat? , de mivel “egyedi típusú”, akkor meg kell írnia a saját >> és

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük