在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:
/* ... */
}
}
答案 0 :(得分:8)
是的,您可以这样做。参见[stmt.switch] / 2:
条件应为整数类型,枚举类型或类类型。如果是类类型,则条件会在上下文中隐式转换(第7条)为整数或枚举类型。