Care este dimensiunea enum?


Cel mai bun răspuns

Presupunând că doriți mărimea (E), unde E este un tip enum:

Depinde pe tipul de bază. În mod normal, acesta este int, dar dacă utilizați enum class puteți specifica acest lucru în C ++. Oricum ar fi, sizeof ar trebui să dea valoarea corectă.

Nu există un mod standard sau integrat pentru a determina numărul de enumerands în C sau C ++. Dacă sunteți disciplinat și nu aveți goluri, puteți folosi așa ceva: fiecare număr și cu excepția primului ar trebui să fie unul mai mare decât predecesorul său:

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

Aici, numărul de zile este același cu valoarea int a LAST, dar, desigur, trebuie să vă asigurați că LAST este într-adevăr ultimul. Compilatorul nu poate aplica acest lucru.

Dacă nu începeți de la zero, dar, dintr-un anumit motiv, începeți de la 7, puteți calcula LAST – Monday:

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

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

Aici, de asemenea, asigurați-vă că luni rămâne primul .

Răspuns

O enumere (prescurtare pentru enumerare ) este o tehnică pentru adăugarea unui fel de semnificație numerelor. Calculatoarele se limitează să lucreze doar în numere, iar enumerările ne permit să pretindem că aceste numere descriu o calitate, mai degrabă decât o cantitate.

Una dintre cele mai faimoase enumerări este codificarea pe care o folosim pentru stocarea textului. Ideea este de a atribui câte un număr fiecăreia dintre literele noastre, mult în felul în care o carte pentru copii va scrie un cod numeric. Codul pe care îl folosim arată cam așa:

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

Dacă sunteți pe o mașină Windows, încercați acest lucru: Faceți clic undeva unde puteți tasta text. Țineți apăsat ALT și, în timp ce o țineți apăsată, tastați unul dintre aceste numere pe tastatura numerică. De exemplu [țineți apăsat Alt] 65 [Eliberați Alt]. Apare litera A; aceasta este o metodă foarte veche pentru tastarea caracterelor direct de către codul lor numeric. Este cel mai util pentru a introduce caractere internaționale atunci când nu aveți tastatura potrivită instalată: Çüéâäàåçê … sunt ceea ce primesc de la Alt + 128, 129, 130 etc. Aceasta este o modalitate de a expune enumerarea subiacentă a personajelor.

Nu există nimic magic în alegerea numărului 65 pentru a însemna A; singurul lucru care contează este că suntem consecvenți. O enumerare, deci, este o metodă de atribuire a numerelor ideilor nenumerice și de a face codul puțin mai ușor de utilizat.

Atenție, este este util ca ordonarea caracterelor să se potrivească cu ordinea alfabetică (cel puțin în engleză). Acest lucru face mai ușor să scrieți sorturi de șiruri care sortează lucrurile în ordine alfabetică, deoarece puteți înșela și utiliza comparații cu privire la valoarea numerică. Devine puțin mai complicat în alte limbi, deoarece valorile numerice atribuite caracterelor nu se potrivesc întotdeauna cu ordonarea alfabetică.

Pentru un alt exemplu de enumerare, să presupunem că scriem un program pentru a trata cu conexiuni de rețea. Conexiunile de rețea pot avea câteva stări diferite; ar putea fi ascultate , deschis , închis , sau într-o stare eroare . Acestea sunt calități, nu cantități și pentru ce este o enumerare:

enum ConnectionState {

NCON\_LISTEN,

NCON\_OPEN,

NCON\_CLOSED,

NCON\_ERROR

};

În opinia mea, este de obicei o practică mai bună să încorporați enumerările dvs. într-o definiție a clasei. Acest lucru vă permite să ignorați prefixele:

class Connection {

public:

enum State {

LISTEN, OPEN, CLOSED, ERROR

};

};

Tipul este Connection::State, iar valorile sunt Connection::LISTEN, Connection::OPEN, etc. Cred că acest lucru este mai clar.

Exemplul dvs. de amestecare a valorilor numerice cu valorile enum nu este ” nu are sens; toate valorile enumerate trebuie să înceapă cu o literă. De obicei, nu puteți folosi un număr în care se așteaptă o enumerare; Compilatoarele C ++ tratează ints și enums ca diferite tipuri. Nu este interzis să aveți numere semnificative asociate cu valorile enum (rețineți cât de util este pentru ordinea alfabetică), dar nu este o practică implicită.

Puteți emite sau introduce o enumere? Sigur, puteți , dar din moment ce este un tip personalizat, va trebui să vă scrieți propriile >> și

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *