【问题标题】:Using integers as key in map which has enum key在具有枚举键的映射中使用整数作为键
【发布时间】:2013-01-29 13:34:08
【问题描述】:
 enum aaa {a, b, c};

 std::map <aaa, int> container;

 container[0]; //compilation error

我知道在这种情况下容器是空的,我会遇到段错误,但这不是问题。枚举是算术类型,为什么会出现问题?

【问题讨论】:

  • 一个简单的演员就可以解决问题

标签: c++ map stl enums key


【解决方案1】:

你在这两个方面都错了。 :)

int 不能隐式转换为 enum需要显式转换,并且不会出现段错误,因为 container[0] 会初始化新值在地图中。

【讨论】:

  • 我明白了。所以只有 enum 可以隐式转换为 int,而不是相反。
  • @user1873947 是的。类型安全ftw。编译器迫使您三思而后行,这是一件好事。如果您的 int 无法转换为该枚举怎么办?如果你说container[42]呢?
【解决方案2】:

容器的键类型是aaa0 的类型是 intint 不能隐式转换为 aaa,因此会出现编译器错误。

【讨论】:

  • static_cast 能帮上忙吗?
  • 是的。除了如果您想使用ints 进行索引,为什么不首先将其设为map&lt;int, int&gt;
【解决方案3】:

编译器期望密钥为aaa 类型。所以你需要写container[a]而不是你做什么。

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 2020-01-15
    • 2010-10-15
    • 1970-01-01
    • 2015-06-27
    • 2013-06-22
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多