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

Czy można bezpiecznie założyć, że mapy[5] zawsze będzie 1? Chodzi mi o to, czy mapy[5] zawsze otrzyma domyślną wartość 0 przed "++", nawet jeśli nie zostanie jawnie zadeklarowana, jak w moim kodzie?mapa <int,int> domyślne wartości

+2

Prawdopodobny duplikat domyślnej wartości [std :: map dla typu wbudowanego] (http://stackoverflow.com/questions/4523959/stdmap-default-value-for-build-in-type) – bobobobo

+2

@bobobobo: to pytanie jest starsze niż [domyślna wartość std :: map dla typu wbudowanego] (http://stackoverflow.com/questions/4523959/ stdmap-default-value-for-build-in-type), a następnie duplikat powinien być [std :: map domyślną wartością typu wbudowanego] (http://stackoverflow.com/questions/4523959/stdmap-default -wartość-do-wbudowania-typu). – mpromonet

Odpowiedz

66

Natychmiast po uzyskaniu dostępu do mapy za pomocą operatora [], jeśli klucz nie istnieje, zostanie dodany. Domyślny inicjator typu int zostanie wywołany - otrzyma wartość 0.

+0

Jak już doświadczyłem, niezainicjowana pierwotna wartość początkowa 'int' jest niezdefiniowana_ - to znaczy może wynosić 0, lub może wynosić -99765521. Czy kiedykolwiek miałeś niezainicjowaną 'int' jako zmienną klasy i czy w twoim programie pojawiła się jedna z tych zwariowanych wartości? To powiedziawszy, przetestowałem to i wygląda na to, że działa. '#include #include używanie przestrzeni nazw std; int main() { mapa m; dla (int i = 0; i <100; i ++) m [i] ++; dla (stała para & p: m) printf ("m [% d] =>% d \ n", p.first, p.second); } ' – bobobobo

+14

Działa w inny sposób niż myślisz. int x; powoduje, że x otrzymuje niezdefiniowaną wartość int x = int(); Znów x otrzymuje 0 klasa foo {int x; foo(): x() {}}; foo f; Tutaj f.x będzie zero –

7

Tak, domyślną wartością będzie domyślna tego typu. Jeśli chcesz uzyskać inną wartość domyślną, możesz utworzyć klasę, która zachowuje się jak int, ale ma inny domyślny konstruktor.