我对noexcept
说明符的使用不熟悉,我不明白为什么std::array::front
和std::array::back
未被声明为noexcept
(而{{1} }和std::array::begin
是。)
这是什么原因?
答案 0 :(得分:14)
零长度数组
(N == 0)
有一种特殊情况。在这种情况下,array.begin() == array.end()
,这是一些独特的价值。 <{1}}或front()
对零大小数组的调用效果未定义。
因为我们可以有一个0大小的数组back()
和front()
可能导致异常
operator[]
, front
and back
be marked noexcept
back()
上的标准策略是仅标记不能或不能失败的函数,而不是那些仅指定不抛出异常的函数。换句话说,所有具有有限域的函数(传递错误的参数并且您得到未定义的行为)都不是noexcept
,即使它们未被指定要抛出。