2015-04-22 66 views
5
的std ::地圖默認值

比方說,我們有:對枚舉

enum X { 
    X1, 
    X2, 
    X3 
}; 

int func() { 
    std::map<int, X> abc; 
    ... 
} 

假設0是不是在容器中的關鍵。

我知道abc [0]需要初始化X對象。

這裏有幾個問題:

(1)將初始化永遠是零初始化枚舉?即abc [0]總是被初始化爲對應於0的枚舉器?

(2)如果我們有

enum X { 
    X1 = 1, 
... 

會有什麼ABC [0]是什麼?

+1

零爲X爲有效值,即使不具有相應的枚舉它。 –

+0

你運行程序並打印出值嗎? – newbie

+1

@Brett他的觀點是「如果你不設置它,默認值是什麼」 – Amxx

回答

1

對於枚舉,初始化是否始終爲零初始化?即abc[0]總是初始化爲0對應的枚舉器?

是的。

如果我們有

enum X { 
    X1 = 1, 
    ... 

會有什麼abc[0]是什麼?

這將是0

工作程序(也可以在http://ideone.com/RVOfT6可見):

#include <iostream> 
#include <map> 

enum X { 
    X1, 
    X2, 
    X3 
}; 

int main() 
{ 
    X x = {}; 
    std::map<int, X> abc; 
    std::cout << x << std::endl; 
    std::cout << abc[0] << std::endl; 
} 

輸出:

 
0 
0 
+0

@Brett,如果沒有元素,'std :: map'的'operator []'函數將向map添加一個初始化值的元素對應於鍵 –

+0

當你查詢一個帶有鍵的地圖時,如果它不在那裏,它會在地圖上創建一個節點,所以你會得到abc [0]的值爲零,如果你在調用abc [0 ],它會是零,在你查詢它的大小後,它的大小將會是1 – Steephen

+0

@Brett:它存在!看看'map :: operator []'。這個函數的調用相當於: '(*(這個 - >插入(make_pair(k,mapped_type()))。first)).'' – Amxx