为什么std :: array :: front和std :: array :: back不是noexcept?

时间:2015-09-17 16:41:55

标签: c++ arrays c++11 c++14 noexcept

我对noexcept说明符的使用不熟悉,我不明白为什么std::array::frontstd::array::back未被声明为noexcept(而{{1} }和std::array::begin是。)

这是什么原因?

1 个答案:

答案 0 :(得分:14)

来自cppreference

  

零长度数组(N == 0)有一种特殊情况。在这种情况下,array.begin() == array.end(),这是一些独特的价值。 <{1}}或front()对零大小数组的调用效果未定义。

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

Sebastian Redl

上引用why the standard doesn't mandate operator[], front and back be marked noexcept
  

back()上的标准策略是仅标记不能或不能失败的函数,而不是那些仅指定不抛出异常的函数。换句话说,所有具有有限域的函数(传递错误的参数并且您得到未定义的行为)都不是noexcept,即使它们未被指定要抛出。