Quale è meglio usare? (Enum o Costante)

3

Ho il mio enum in questo modo.

enum Size{PAGE_SIZE=20,
          HEADER_SIZE=30
};

Li uso solo come costanti (nessuna variabile enum creata) nel mio programma.
i.e = int x = PAGE_SIZE + 20;

Quindi qual è il modo migliore per dichiarare le costanti in questo scenario? (enum o const)

    
posta sk patra 25.12.2013 - 08:04
fonte

1 risposta

4

Forse a causa del mio background in altre lingue dove la tipizzazione di enum è più rigorosa (*), tendo a pensare che se vuoi un tipo in grado di contenere un insieme di costanti, usa un enum , se vuoi un gruppo di costanti, usa un gruppo di costanti e non introdurre un tipo dove non ce n'è bisogno.

Ci sono state considerazioni che hanno reso la scelta di una enum migliore al momento, ma l'unica che posso pensare che sia sopravvissuta alla normalizzazione di C ++ 98 è la compatibilità con C e le precedenti implementazioni di C ++ (e alcuni hanno mantenuto come il loro stile ciò che era necessario quando lo hanno stabilito).

Ciò che è sopravvissuto sono le considerazioni che hanno reso preoccupante l'uso di un tipo aggiuntivo. Il fatto che le costanti siano di un altro tipo che normalmente non viene utilizzato può interferire con la risoluzione di sovraccarico e la deduzione di tipo nei modelli. Le regole sono tali che di solito ciò che vuoi - forse a costo di un'istanza aggiuntiva per il tipo spuri di enum - ma ci sono momenti in cui non lo è. Ad esempio

template <typename T> MyClass<T> make_MyClass(T) {...}

restituisci un MyClass<Size> per make_MyClass(PAGE_SIZE) dove probabilmente ti aspetteresti un MyClass<int> se la ragione per introdurre l'enum non era avere un tipo ma introdurre delle costanti.

(*) nota che una tipizzazione più rigorosa di enum è stata ritenuta sufficientemente desiderabile che una variazione è ora fornita come enum class da C ++ 11.

    
risposta data 25.12.2013 - 14:39
fonte

Leggi altre domande sui tag