Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    69

    [C++] valore default variabili intere (o double)

    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)

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    La mappa contiene elementi di tipo std:air<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/
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    69
    Originariamente inviato da shodan
    La mappa contiene elementi di tipo std:air<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...

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Puoi stare tranquillo. Lo standard dice che il costruttore di default deve avere il comportamento che ho scritto. (Ho controllato per sicurezza.)
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    69
    Grazie, mi sento più tranquillo!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.