2015-04-22 81 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