是例外的例外描述:: what()标准异常的标准化吗?

时间:2013-12-18 19:42:35

标签: c++ exception standards

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

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

2 个答案:

答案 0 :(得分:3)

  

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

不,这不是标准化的。

bad_alloc

为例
  

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

     

返回:实现定义的NTBS。

(NTBS表示“以空字符结尾的字节字符串”;它是您关心的“实现定义”。)

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


  

是否有某些原因会返回更具描述性的字符串,例如内存分配失败?

可能是因为它更长,实际上更具描述性。像“内存分配失败”这样的冗长字符串是不必要的;在调用代码时,提供信息的短字符串总是可以扩展为更加人性化。

答案 1 :(得分:0)

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