来自 exception::what() 的异常描述是否针对标准异常进行了标准化



对于像 std::bad_alloc 这样的标准化异常,exception::what()返回的字符串是否应该在编译器中相同?

例如,我使用过的几个编译器都返回bad allocation bad_alloc::what()。 是否有某种原因没有返回更具描述性的字符串(如 Memory allocation failure)?

exception::what()返回的字符串是否应该在编译器之间相同?

不,这不是标准化的。

以您的bad_alloc为例:

[C++11: 18.6.2.1/5]: virtual const char* what() const noexcept;

返回:实现定义的 NTBS。

(NTBS 表示"以 null 结尾的字节字符串";它是你关心的"实现定义的"。

充其量,此模式在所有标准异常定义中找到。


是否有某种原因没有返回更具描述性的字符串(如内存分配失败)?

可能是因为它更长,实际上没有更多的描述性。像"内存分配失败"这样的冗长字符串是非常不必要的;在调用代码中,始终可以扩展提供信息的短字符串,使其更加人性化。

没有标准,这完全取决于C++运行时的实现。

最新更新