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

mapy[5]은 항상 1이라고 가정하는 것이 안전한가요? 내 코드에서와 같이 명시 적으로 선언하지 않더라도 mapy[5]은 항상 '++'앞에 0의 기본값을 갖습니다.map <int,int> 기본값은

+2

가능한 [build-in 유형의 기본 값 : map] (http://stackoverflow.com/questions/4523959)/stdmap-default-value-for-type) – bobobobo

+2

@bobobobo :이 질문은 [std :: map 기본 설정 값]보다 오래되었습니다. (http://stackoverflow.com/questions/4523959/ stdmap-default-value-for-build-in-type)이면 복제본은 [std :: map build-in type의 기본 값]이어야합니다 (http://stackoverflow.com/questions/4523959/stdmap-default -value-for-build-in-type). – mpromonet

답변

66

[] 연산자로지도에 액세스하는 즉시 키가 존재하지 않으면 추가됩니다. int 타입의 기본 이니셜 라이저가 호출되므로 0 값을 얻습니다.

+0

내가 경험했던 것과는 달리, 초기화되지 않은 원시 int 형의 초기 값은 _undefined_입니다. 0 일 수도 있고 -99765521 일 수도 있습니다. 클래스 변수로서 초기화되지 않은'int'를 가지고 있고, 그 값중 하나가 당신의 프로그램에 나타났습니다. 즉, 나는 이것을 테스트하고 그것이 효과가있는 것으로 보인다. '#include #include using namespace std; int main() { map m; for (int i = 0; i <100; i ++) m [i] ++; for (const 쌍 & p : m) printf ("m [% d] => % d \ n", p.first, p.second); }' – bobobobo

+14

그것은 당신이 생각하는 것과는 다른 방식으로 작동합니다. int x; x는 x가 정의되지 않은 값이되도록합니다. int x = int(); 다시 x가 0이됩니다. class foo {int x; foo() : x() {}}; foo f; 여기서 f.x는 0입니다. –

7

예, 기본값은 해당 유형의 기본값입니다. 다른 기본값을 원하면 int처럼 작동하지만 다른 기본 생성자가있는 클래스를 만들 수 있습니다.

관련 문제