2010-04-19 11 views
42
std::map<int,int> mapy; 
++mapy[5]; 

È sicuro assumere che mapy[5] sarà sempre 1? Voglio dire, sarà sempre mapy[5] ottenere il valore predefinito di 0 prima di '++', anche se non dichiarato esplicitamente, come nel mio codice?mappa <int,int> valori predefiniti

+2

Possibile duplicato di [std :: map valore predefinito per tipo di build-in] (http://stackoverflow.com/questions/4523959/stdmap-valore-predefinito-per-tipo-build-in) – bobobobo

+2

@bobobobo: questa domanda è precedente a [std :: map valore predefinito per tipo build-in] (http://stackoverflow.com/questions/4523959/ stdmap-default-value-for-build-in-type), quindi il duplicato dovrebbe essere [std :: map valore predefinito per tipo build-in] (http://stackoverflow.com/questions/4523959/stdmap-default -value-per-build-in-tipo). – mpromonet

risposta

66

Non appena si accede alla mappa con l'operatore [], se la chiave non esiste viene aggiunta. Viene richiamato l'inizializzatore di default del tipo int - quindi otterrà il valore 0.

+0

Per quanto ho sperimentato, un valore iniziale di 'int' primitivo non inizializzato è _undefined_ - cioè può essere 0, o può essere -99765521. Hai mai avuto un 'int' non inizializzato come una variabile di classe e uno di quei valori stravaganti appare nel tuo programma? Detto questo, ho provato questo e sembra funzionare. '#include #include utilizzando namespace std; int main() { mappa m; per (int i = 0; i <100; i ++) m [i] ++; per (coppia const & p: m) printf ("m [% d] =>% d \ n", p.first, p.second); } ' – bobobobo

+14

Funziona in un modo diverso da quello che pensi. int x; fa x ottenere un valore indefinito int x = int(); Ancora x ottiene 0 classe foo {int x; foo(): x() {}}; pippo; Qui f.x sarà zero –

7

Sì, il valore predefinito sarà il valore predefinito di quel tipo. Se si desidera un altro valore predefinito, è possibile creare una classe che si comporta come un int ma ha un costruttore di default diverso.

Problemi correlati