lvl
是enum class
。
switch(lvl)
{
case LogLevel::Trace:
return "Trace";
case LogLevel::Debug:
return "Debug";
case LogLevel::Info:
return "Info";
case LogLevel::Warning:
return "Warning";
case LogLevel::Error:
return "Error";
case LogLevel::Fatal:
return "Fatal";
default:
assert(0 && "Unhandled LogLevel in LevelToStr"); return "???"; // This one?
throw std::invalid_argument( "Unhandled LogLevel in LevelToStr" ); // or this one?
}
共识是default
应该存在,但related question中的意见在它应该做的事情上存在分歧。崩溃整个事情?崩溃当前线程?尝试优雅地处理异常?
双方在评论中提出了一些论点,但讨论并不十分明确。
有人可以提供一个应该使用的综合答案,或者在哪些条件下?
答案 0 :(得分:2)
完全取决于系统的要求。
我实际上认为在这种情况下最好不要使用T
。如果你把它遗漏了,如果你在编译时错过了一个案例,你会得到一个有用的警告。如果使用-Werror进行编译,那么在修复警告之前,程序将无法编译。
default: