std :: map枚举的默认值

use*_*360 5 c++ enums initialization

假设我们有:

enum X {
  X1,
  X2,
  X3
};

int func() {
  std::map<int, X> abc;
  ...
}
Run Code Online (Sandbox Code Playgroud)

假设0是不在容器中的键.

我知道abc [0]需要对X对象进行值初始化.

以下是问题:

(1)枚举初始化是否始终为零初始化?即abc [0]总是初始化为对应0的枚举器?

(2)如果有的话怎么办?

enum X {
  X1 = 1,
...
Run Code Online (Sandbox Code Playgroud)

abc [0]会是什么?

R S*_*ahu 1

枚举的初始化总是零初始化吗?即abc[0]始终初始化为对应于0?的枚举器。

是的。

如果我们有怎么办

enum X {
   X1 = 1,
   ...
Run Code Online (Sandbox Code Playgroud)

会是什么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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0
0