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

Est-il sûr de supposer que mapy[5] sera toujours 1? Je veux dire, mapy[5] obtiendra toujours la valeur par défaut de 0 avant '++', même si elle n'est pas explicitement déclarée, comme dans mon code?carte <int,int> valeurs par défaut

+2

double possible de [std :: carte valeur par défaut de construction dans le type] (http://stackoverflow.com/questions/4523959/stdmap-default-value-for-build-in-type) – bobobobo

+2

@bobobobo: cette question est antérieure à [std :: map valeur par défaut pour le type de construction] (http://stackoverflow.com/questions/4523959/ stdmap-default-value-for-build-in-type), alors le doublon devrait être [std :: map valeur par défaut pour le type de construction] (http://stackoverflow.com/questions/4523959/stdmap-default -value-for-build-in-type). – mpromonet

Répondre

66

Dès que vous accédez à la carte avec l'opérateur [], si la clé n'existe pas il est ajouté. Le initialiseur par défaut du type int obtient invoqué - il obtiendra une valeur de 0.

+0

Tout comme je l'ai expérimenté, la valeur initiale d'une primitive non initialisée 'int' est _undefined_, c'est-à-dire qu'elle peut être 0, ou peut être -99765521. Vous avez déjà eu un 'int' non initialisé en tant que variable de classe et une de ces valeurs farfelues est apparue dans votre programme? Cela dit, j'ai testé cela et cela semble fonctionner. '#include #include using namespace std; int main() { carte m; pour (int i = 0; i <100; i ++) m [i] ++; pour (const paire & p: m) printf ("m [% d] =>% d \ n", p.first, p.second); } ' – bobobobo

+14

Cela fonctionne différemment de ce que vous pensez. int x; rend x obtenir une valeur indéfinie int x = int(); Encore une fois x obtient 0 classe foo {int x; foo(): x() {}}; foo f; Ici f.x sera zéro –

7

Oui, la valeur par défaut sera la valeur par défaut de ce type. Si vous voulez un autre défaut, vous pouvez créer une classe qui se comporte comme un int mais qui a un constructeur par défaut différent.