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

Vin*_*ent 23 c++ arrays noexcept c++11 c++14

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

这是什么原因?

Nat*_*ica 14

来自cppreference

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

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

引述塞巴斯蒂安·雷德尔为什么标准不强制要求operator[],frontback标明noexcept

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

  • 但这是一个静态条件,所以`noexcept`可能是有条件的(就像`vector`的默认构造函数). (9认同)
  • 你的答案都没有关系.这不是狭隘的合同.`std :: array`不是动态容器. (4认同)