Risposta migliore
Supponendo che tu voglia sizeof (E), dove E è un tipo di enumerazione:
Dipende sul tipo sottostante. Normalmente è int, ma se usi enum class
puoi specificarlo in C ++. In ogni caso, sizeof dovrebbe fornire il valore corretto.
Non esiste un modo standard o integrato per determinare il numero di enumerandi in C o C ++. Se sei disciplinato e non hai spazi vuoti puoi usare qualcosa del genere: ogni enumerazione eccetto il primo dovrebbe essere uno più alto del suo predecessore:
enum Days { Monday, Tuesday, … Saturday, LAST };
Qui, il numero di giorni è lo stesso del valore int di LAST, ma ovviamente devi assicurarti che LAST sia davvero lultimo. Il compilatore non può imporlo.
Se non inizi da zero, ma per qualche motivo parti da 7, potresti calcolare LAST – Monday:
enum Days { Monday = 7, Tuesday, … Saturday, LAST };
int numDays = LAST - Monday; // still yields 7
Qui, assicurati anche che Il lunedì rimane il primo .
Risposta
Un enum (abbreviazione di enumerazione ) è una tecnica per aggiungere un qualche tipo di significato ai numeri. I computer si limitano a lavorare solo in numeri e le enumerazioni fanno finta che quei numeri descrivano una qualità, piuttosto che una quantità.
Una delle enumerazioni più famose è la codifica che usiamo per memorizzare il testo. Lidea è di assegnare un numero a ciascuna delle nostre lettere, proprio come un libro per bambini scriverà un codice numerico. Il codice che usiamo è simile a questo:
A = 65, B = 66, C = 67, … Z = 90; a = 97, b = 98, c = 99, … z = 122.
Se sei su una macchina Windows, prova questo: fai clic su un punto in cui puoi digitare del testo. Tieni premuto il tasto ALT e mentre tieni premuto digita uno di questi numeri sul tastierino numerico. Ad esempio [Tieni premuto Alt] 65 [Rilascia Alt]. Apparirà la lettera A; questo è un metodo molto vecchio per digitare i caratteri direttamente il loro codice numerico. È utile soprattutto per digitare caratteri internazionali quando non è installata la tastiera corretta: Çüæâäàåçê … sono ciò che ottengo da Alt + 128, 129, 130, ecc. Questo è un modo per esporre lenumerazione sottostante dei caratteri.
Non cè niente di magico nellaver scelto che il numero 65 significhi A; lunica cosa che conta è che siamo coerenti. Unenumerazione, quindi, è un metodo per assegnare numeri a idee non numeriche e per rendere il codice un po più facile da lavorare.
Intendiamoci è utile che lordine dei caratteri corrisponda allordine alfabetico (almeno in inglese). Questo rende più facile scrivere ordinamenti di stringhe che ordinano le cose in ordine alfabetico, perché puoi imbrogliare e usare confronti sul valore numerico. Diventa un po più complicato in altre lingue, perché i valori numerici assegnati ai caratteri non corrispondono sempre allordine alfabetico.
Per un altro esempio di enumerazione, supponiamo di scrivere un programma per trattare con connessioni di rete. Le connessioni di rete potrebbero avere diversi stati; potrebbero essere in ascolto , aperte , chiuso o in uno stato errore . Si tratta di qualità, non quantità e questo è il significato di un enum:
enum ConnectionState {
NCON\_LISTEN,
NCON\_OPEN,
NCON\_CLOSED,
NCON\_ERROR
};
Secondo me, di solito è una pratica migliore incorporare le enumerazioni allinterno di una definizione di classe. Ciò ti consente di saltare i prefissi:
class Connection {
public:
enum State {
LISTEN, OPEN, CLOSED, ERROR
};
};
Il tipo è Connection::State
e i valori sono Connection::LISTEN
, Connection::OPEN
, ecc. Penso che questo sia più chiaro.
Il tuo esempio di combinazione di valori numerici e valori enum non lo fa ” t ha senso, tutti i valori enumerati devono iniziare con una lettera. Di solito non è possibile utilizzare un numero in cui è prevista unenumerazione; I compilatori C ++ trattano gli int e le enumerazioni come tipi diversi. Non è vietato avere numeri significativi associati a valori enum (nota quanto è utile per lordine alfabetico), ma non è la pratica predefinita.
Puoi produrre o inserire unenumerazione? Certo che puoi , ma poiché “è un tipo personalizzato, dovrai scrivere i tuoi operatori >> e