当 0 传递给 allocate 方法时是否可以抛出异常?

谢谢你。

附言



这是否意味着allocate不应引发异常?我倾向于认为如果 n==0 不允许 throw ,那么标准会清楚地说明它。

最佳答案

所有标准必须说 (§20.1.5/2) 是给定的

  • T – 任何类型
  • XT
  • 类型的分配器类
  • aX&
  • 类型的值
  • nX::size_type 类型的值,

  • 如果 a.allocate(n) 等于 0,则表达式 n 的返回值是未指定的。

    一方面,鉴于 X::allocate 没有任何强制的异常规范并且明确地可能抛出 std::bad_alloc ,我不明白为什么它也不能抛出其他类型的异常。另一方面,该措辞专门指出 n 等于 0 的条件,并直接暗示存在返回值,这意味着您不应该抛出。我认为它可能对某些解释持开放态度,但就我个人而言,我会支持后者并认为它是一个普通的代码路径。

    10-06 07:19