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
应该存在的,但相关问题中的意见对于它应该做什么存在分歧。让整个事情崩溃?使当前线程崩溃?尝试优雅地处理异常?
双方在评论中提出了一些论点,但讨论并不完全有定论。
有人可以提供一个全面的答案,应该使用哪个,或者在什么条件下使用?