enum aaa {a, b, c};
std::map <aaa, int> container;
container[0]; //compilation error
我知道在这种情况下容器是空的,我会得到段错误,但这不是问题。枚举是算术类型,为什么会出现问题?
答案 0 :(得分:6)
你两个都错了。 :)
int
无法隐式转换为enum
,需要显式转换,并且您不会遇到段错误,因为container[0]
会value-初始化地图中的新值。
答案 1 :(得分:1)
容器的密钥类型为aaa
。 0
的类型为int
。 <{1}}不能隐式转换为int
,因此会出现编译错误。
答案 2 :(得分:1)
编译器期望密钥为aaa
类型。所以你需要写container[a]
而不是你做的。
答案 3 :(得分:1)
对于std :: map的代码,你没有得到seg-fault,operator []在地图中插入一个新元素。
无论如何,如果你确定你在做什么,你必须将int转换为enum,但如果你这样做,你就可以不使用枚举(只是你的int并且你已经完成了),所以更好的解决方案是直接使用枚举,只有在你别无选择时才会涉及演员阵容。