捕获的 std::exception 是否可以让 what() 为 NULL?
检查下面的 e.what() 是否有开销?
//...
}
catch (const std::exception& e)
{
std::string error;
if(e.what())
error = e.what();
}
最佳答案
字符串的内容是实现定义的,所以我想答案是肯定的。
编辑:保护它。标准说:
virtual const char* what() const throw();
5 Returns: An implementation-defined NTBS.
所以它必须返回一个字符串,而不仅仅是一个指针。并且字符串不能为 NULL
。正如其他人指出的那样,很容易推导出 what()
确实返回 NULL
的异常,但我不确定这些事情如何符合标准一致性。当然,如果您在自己的异常类中实现 what(),我认为允许它返回 NULL 是非常糟糕的做法。
更多:
有关 what()
是否可以返回 NULL 的进一步问题,以及类似的令人兴奋的问题,请参阅 Extending the C++ Standard Library by inheritance?
关于c++ 异常,what() 可以为 NULL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1038482/