当 0 传递给 allocate
方法时是否可以抛出异常?
谢谢你。
附言
这是否意味着allocate
不应引发异常?我倾向于认为如果 n==0 不允许 throw ,那么标准会清楚地说明它。
最佳答案
所有标准必须说 (§20.1.5/2) 是给定的
T
– 任何类型 X
– T
a
– X&
n
– X::size_type
类型的值,如果
a.allocate(n)
等于 0,则表达式 n
的返回值是未指定的。一方面,鉴于
X::allocate
没有任何强制的异常规范并且明确地可能抛出 std::bad_alloc
,我不明白为什么它也不能抛出其他类型的异常。另一方面,该措辞专门指出 n
等于 0 的条件,并直接暗示存在返回值,这意味着您不应该抛出。我认为它可能对某些解释持开放态度,但就我个人而言,我会支持后者并认为它是一个普通的代码路径。