Il modo tipico per definire un numero intero costante da utilizzare all'interno di una funzione è:C'è un motivo per usare enum per definire una singola costante nel codice C++?
const int NumbeOfElements = 10;
lo stesso per l'utilizzo all'interno di una classe:
class Class {
...
static const int NumberOfElements = 10;
};
Può quindi essere utilizzato come una matrice di dimensioni fisse legato che significa che è noto al momento della compilazione.
Molto tempo fa i compilatori non hanno sostenuto la seconda sintassi e questo è il motivo per cui le enumerazioni sono stati utilizzati:
enum NumberOfElementsEnum { NumberOfElements = 10; }
Ora con quasi ogni compilatore ampiamente utilizzato supporta sia l'in-funzione di const int
e l'in-class static const int
sintassi è c'è qualche ragione per usare l'enum per questo scopo?
Hmm, gcc non si lamenta nemmeno con -pedantic -Wall -Wextra. Suppongo che, poiché non è in grado di rilevare l'errore fino al momento del collegamento, rinuncia solo a cercare di diagnosticare codice non portatile di questo tipo. –
Buona risposta. Un'altra cosa carina che non si menziona esplicitamente è che un enum è un valore, e quindi nessuna memoria viene mai assegnata per questo. Può essere utile sapere che * di sicuro *, piuttosto che basarsi sull'ottimizzazione del compilatore se si sta eseguendo metaprogrammazione di modelli e istanziando un gran numero di modelli di classi. – jalf
Se non esiste una definizione per 'static const int' al di fuori della classe, non ci sarà alcuna memoria allocata per quello. Inoltre, i valori rval possono avere una memoria allocata per loro (i valori temporali sono rvalue, per esempio, e usano sicuramente lo spazio di archiviazione). –