对于像 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++运行时的实现。