对于像std::bad_alloc
这样的标准化异常,exception::what()
返回的字符串是否应该在编译器中相同?
例如,我使用过的几个编译器都为bad allocation
返回bad_alloc::what()
。是否有某些原因会返回更具描述性的字符串,例如Memory allocation failure
?
答案 0 :(得分:3)
exception::what()
返回的字符串在编译器中是否相同?
不,这不是标准化的。
以bad_alloc
:
[C++11: 18.6.2.1/5]:
virtual const char* what() const noexcept;
返回:实现定义的NTBS。
(NTBS表示“以空字符结尾的字节字符串”;它是您关心的“实现定义”。)
充其量,此模式可在所有标准异常定义中找到。
是否有某些原因会返回更具描述性的字符串,例如内存分配失败?
可能是因为它更长,实际上不更具描述性。像“内存分配失败”这样的冗长字符串是不必要的;在调用代码时,提供信息的短字符串总是可以扩展为更加人性化。
答案 1 :(得分:0)
没有标准,完全取决于C ++运行时的实现。