switch语句和对象隐式int转换

时间:2019-06-11 22:09:22

标签: c++

在C ++中,直接在具有隐式转换为int的对象上使用switch语句合法/正确吗? 而不是使用返回对象标记的方法。

class Action
{
  public:
    enum EType { action1, action2, action3};
    operator int() const { return mType; }
  private:
    EType mType;
  /* ... */
}

int main()
{
    Action a = /* ... */
    switch(a)
    {
    case Action::EType::action1:
        /* ... */
        break;
    case Action::EType::action2:
    /* ... */
    }
}

1 个答案:

答案 0 :(得分:8)

是的,您可以这样做。参见[stmt.switch] / 2:

  

条件应为整数类型,枚举类型或类类型。如果是类类型,则条件会在上下文中隐式转换(第7条)为整数或枚举类型。