c++ 异常,what() 可以为 NULL 吗?

标签 c++ exception

捕获的 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/

相关文章:

java - 与 java 中的 null 值进行比较时出现 NullPointerException

java - 如何在 BasicHttpParams 中设置自定义参数

c++ - 捕获嵌套模板异常 [C++]

java - 在 Java 中使用自定义异常

c++ - 用于公开缓存数据的同步线程安全 API

c++ - 如何重载模板函数以用于枚举?

c++ - "IF"参数求值顺序?

c++ - Pig Latin 字符串迭代,多个单词

c++ - 如何在 C++ 中定义矩阵(数组)列表

java - 单元测试 Spring 抛出 BeanNotOfRequiredTypeException