PDA

Visualizza la versione completa : [C++] valore default variabili intere (o double)


mogre
11-05-2010, 19:53
questo valore è zero o indefinito in C++?




nello specifico ho questo valore definito come parametro di una classe:

map<int, double> generalUttProb;


e da una funzione della classe vorrei chiamare ad esempio:

generalUttProb[666] ++;

è fattibile o devo prima settare generalUttProb[666]=0 (nel caso in c++ il valore degli interi è indefinito)?
e dato che gli indici che andrò adrò a inserire (ad esempio 666) sono più o meno casuali, come faccio a controllare se il valore generalUttProb[666] è già stato inizializzato a zero o se ancora nella struttura map non è stato inserito nessun valore all'indice 666?
(non credo sia lecito scrivere un if del tipo generalUttProb[666]==NULL)

shodan
11-05-2010, 21:18
La mappa contiene elementi di tipo std::pair<T1,T2>. Non so se lo standard specifichi se una pair vuota deve assumere il valore di default dei tipi usati, se non specificatamente inizializzata. L'implementazione di VC++ inizializza la pair a valori di default, quindi pair::first == T1() e pair::second == T2().
A giudicare da qui lo fa secondo standard.
http://www.cplusplus.com/reference/std/utility/pair/

mogre
11-05-2010, 23:30
Originariamente inviato da shodan
La mappa contiene elementi di tipo std::pair<T1,T2>. Non so se lo standard specifichi se una pair vuota deve assumere il valore di default dei tipi usati, se non specificatamente inizializzata. L'implementazione di VC++ inizializza la pair a valori di default, quindi pair::first == T1() e pair::second == T2().
A giudicare da qui lo fa secondo standard.
http://www.cplusplus.com/reference/std/utility/pair/

ho scritto il codice senza inizializzarli, perchè sinceramente ci sarebbe da pensare un po' ad un artifizio da usare e non mi va di allungare troppo il codice e ingarbugliarlo. Però sembra inizializzare il double automaticamente a zero, in quanto l'operatore ++ funziona correttamente incrementando da zero.

Oggi funziona, spero funzioni anche domani e dopodomani... :dottò:

shodan
11-05-2010, 23:38
Puoi stare tranquillo. Lo standard dice che il costruttore di default deve avere il comportamento che ho scritto. (Ho controllato per sicurezza.)

mogre
12-05-2010, 00:24
Grazie, mi sento più tranquillo! :)

Loading