c++ - 切换枚举时在 switch 语句中使用默认值

标签 c++ enums switch-statement

在切换每个枚举都被一个案例覆盖的枚举时,您的程序是什么?理想情况下,您希望代码能够面向 future ,您如何做到这一点?

另外,如果某些白痴将任意 int 强制转换为枚举类型怎么办?是否应该考虑这种可能性?或者我们应该假设这样一个严重的错误会在代码审查中被发现?

enum Enum
{
    Enum_One,
    Enum_Two
};

Special make_special( Enum e )
{
    switch( e )
    {
        case Enum_One:
            return Special( /*stuff one*/ );

        case Enum_Two:
            return Special( /*stuff two*/ );
    }
}

void do_enum( Enum e )
{
    switch( e )
    {
        case Enum_One:
            do_one();
            break;

        case Enum_Two:
            do_two();
            break;
    }
}
  • 不要使用默认情况,gcc 会警告你(Visual Studio 会吗?)
  • 使用 assert(false) 添加默认情况;
  • 添加引发可捕获异常的默认情况
  • 添加一个引发不可捕获异常的默认情况(它可能只是从不捕获它或总是重新抛出的策略)。
  • 我没有考虑过的更好的东西

我对你为什么选择以他们的方式做这件事特别感兴趣。

最佳答案

我抛出一个异常。确实鸡蛋就是鸡蛋,有人会将一个具有错误值而不是枚举值的整数传递给您的开关,最好是大声失败,但让程序有可能处理错误,而 assert() 不会。

关于c++ - 切换枚举时在 switch 语句中使用默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2201493/

相关文章:

c++ - 使用多线程用值填充数组

java - 如何通过计数排序对枚举进行排序?

java - 在Java中使用switch case作为条件语句

java - 如何在java中替换/转换/扩展字符串

Powershell实现Switch语句

c++ - 这是 static_cast 有效/合法吗?

c++ - 为点坐标创建类

c++ - 错误 LNK2019 : unresolved external symbol

java - 使用与类关联的条目创建枚举

ios - 如何在Swift 2或更高版本中利用枚举字符串?