我是使用说明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[]frontbacknoexcept
该标准的政策
noexcept是只标记不能或不能失败的函数,而不是那些简单地指定不抛出异常的函数。换句话说,所有具有有限域的函数(传递错误的参数并且你得到未定义的行为)都不是noexcept,即使它们没有被指定为抛出。