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

假設mapy[5]總是1會安全嗎?我的意思是,mapy[5]總是會在'++'之前得到默認值0,即使沒有明確聲明,就像在我的代碼中一樣?地圖<int,int>默認值

+2

可能的[內置類型的std :: map默認值]重複(http://stackoverflow.com/questions/4523959/stdmap-default-value-for-built-in-type) – bobobobo 2016-04-21 16:40:49

+2

@bobobobo:這個問題比[std :: map對於內置類型的默認值]更舊(http://stackoverflow.com/questions/4523959/ stdmap-default-value-for-build-in-type),那麼重複的應該是[std :: map爲內置類型的默認值](http://stackoverflow.com/questions/4523959/stdmap-default - 值換內建型)。 – mpromonet 2016-04-22 06:33:47

回答

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] ++; (const對&p:m) printf(「m [%d] =>%d \ n」,p.first,p.second); }' – bobobobo 2013-07-02 13:43:25

+14

它的工作方式與您想象的不同。 int x; 使x得到未定義的值 int x = int(); 再次x得到0 class foo {int x; foo():x(){}}; foo f; 這裏f.x將爲零 – 2013-07-11 18:40:46

7

是的,默認值將是該類型的默認值。如果你想要另一個默認值,你可以創建一個行爲類似於int但具有不同的默認構造函數的類。