我是使用说明noexcept
符的新手,我不明白为什么std::array::front
并且std::array::back
没有声明noexcept
(而std::array::begin
和std::array::end
是)。
这是什么原因?
零长度数组有一种特殊情况
(N == 0)
。在这种情况下,array.begin() == array.end()
,这是一些独特的价值。调用front()
orback()
对大小为零的数组的影响是未定义的。
所以因为我们可以有一个 0 大小的数组front()
并且back()
可能导致异常
引用塞巴斯蒂安·雷德尔(Sebastian Redl )为什么该标准不强制要求并被标记operator[]
front
back
noexcept
该标准的政策
noexcept
是只标记不能或不能失败的函数,而不是那些简单地指定不抛出异常的函数。换句话说,所有具有有限域的函数(传递错误的参数并且你得到未定义的行为)都不是noexcept
,即使它们没有被指定为抛出。