2015-04-22 10 views
5

Diciamo che abbiamo:std :: map valore predefinito per le enumerazioni

enum X { 
    X1, 
    X2, 
    X3 
}; 

int func() { 
    std::map<int, X> abc; 
    ... 
} 

supponga 0 è la chiave che non è nel contenitore.

So che abc [0] ha bisogno di inizializzare il valore dell'oggetto X.

Ecco le domande:

(1) Sarà l'inizializzazione essere sempre zero-inizializzazione per le enumerazioni? vale a dire abc [0] è sempre inizializzato come l'enumeratore corrispondente a 0?

(2) Che cosa succede se abbiamo

enum X { 
    X1 = 1, 
... 

Cosa abc [0] essere?

+1

zero è un valore valido per X, anche se non ha una corrispondente enumeratore. –

+0

Hai eseguito il programma e stampato i valori? – newbie

+1

@Brett Il suo punto era "qual è il valore predefinito se NON lo si imposta – Amxx

risposta

1

L'inizializzazione sarà sempre zero inizializzazione per le enumerazioni? vale a dire abc[0] è sempre inizializzato come l'enumeratore corrispondente a 0?

Sì.

Che cosa succede se abbiamo

enum X { 
    X1 = 1, 
    ... 

Quali saranno abc[0] essere?

Sarà 0.

programma di lavoro (anche può essere visto in http://ideone.com/RVOfT6):

#include <iostream> 
#include <map> 

enum X { 
    X1, 
    X2, 
    X3 
}; 

int main() 
{ 
    X x = {}; 
    std::map<int, X> abc; 
    std::cout << x << std::endl; 
    std::cout << abc[0] << std::endl; 
} 

uscita:

 
0 
0 
+0

@Brett, la funzione' operator [] 'di' std :: map' aggiungerà un elemento inizializzato dal valore alla mappa se non ci sono elementi corrispondente alla chiave –

+0

Quando si interroga una mappa con chiave se non è presente creerà un nodo nella mappa, quindi si otterrà il valore zero per abc [0]. Se si controlla la dimensione della mappa prima di chiamare abc [0 ], sarà zero. Dopo aver richiesto la sua dimensione sarà 1 – Steephen

+0

@Brett: Esiste! Dai un'occhiata a 'map :: operator []'. Una chiamata a questa funzione è equivalente a: '(* ((questo-> insert (make_pair (k, mapped_type())).) first)). second' – Amxx