24

我是使用说明noexcept符的新手,我不明白为什么std::array::front并且std::array::back没有声明noexcept(而std::array::beginstd::array::end是)。

这是什么原因?

4

1 回答 1

15

来自cppreference

零长度数组有一种特殊情况(N == 0)。在这种情况下,array.begin() == array.end(),这是一些独特的价值。调用front()orback()对大小为零的数组的影响是未定义的。

所以因为我们可以有一个 0 大小的数组front()并且back()可能导致异常

引用塞巴斯蒂安·雷德尔(Sebastian Redl 为什么该标准不强制要求并被标记operator[]frontbacknoexcept

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

于 2015-09-17T16:44:20.513 回答