假设我有一个枚举。
enum class ShapeName : char {TRIANGLE,CIRCLE,SQUARE};
之后我有一个像这样的函数:
void Function (ShapeName const shape){
switch (shape){
case ShapeName::TRIANGLE:
DoSomething1();
break;
case ShapeName::CIRCLE:
DoSomething2();
break;
case ShapeName::SQUARE:
DoSomething3();
break;
default:
//THIS CODE BLOCK SHOULD NEVER BE EXECUTED!
}
return;
}
尽管默认标签不应该执行,但我想考虑到程序员在“ShapeName”中添加另一个值时可能出现的潜在错误。你会建议我做什么? 1. 断言
我可以使用断言,但我要断言什么呢?
assert(false); //?
2. 异常
我可以抛出一个异常,但我认为这不是很好的实践。 我的印象是,异常是用于不能预测的运行时事件的,因为某些环境原因。
3. 退出
我可以立即以错误退出程序。感觉这是最好的想法,但我不确定这是否是良好的实践。 我认为断言的优点在于,当你准备好发布程序时,可以关闭所有断言,然后所有的断言代码都将不存在。
也许还有其他我不知道的方法。我确实使用了一个编译器标志来警告未考虑的值,但我仍然想知道其他人的建议。