【发布时间】:2010-02-04 16:51:49
【问题描述】:
在切换每个枚举都被一个案例覆盖的枚举时,您的程序是什么?理想情况下,您希望代码能够面向未来,您如何做到这一点?
另外,如果某些白痴将任意 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)添加默认情况; - 添加引发可捕获异常的默认情况
- 添加一个引发不可捕获异常的默认情况(可能只是从不捕获它或总是重新抛出的策略)。
- 我没有考虑过的更好的东西
我对你为什么选择以他们的方式做这件事特别感兴趣。
【问题讨论】:
标签: c++ enums switch-statement