length biblioteca array c++ arrays c++11 c++14 noexcept

c++ - biblioteca - ¿Por qué std:: array:: front y std:: array:: back no son excepto?



return array c++ (1)

Soy nuevo en el uso del especificador noexcept y no entiendo por qué std::array::front y std::array::back no se declaran noexcept (mientras que std::array::begin y std::array::end son).

¿Cuál es la razón de eso?


De cppreference

Hay un caso especial para una matriz de longitud cero (N == 0) . En ese caso, array.begin() == array.end() , que es un valor único. El efecto de llamar a front() o back() en una matriz de tamaño cero no está definido.

Entonces, ya que podemos tener una matriz de tamaño 0, la parte front() y la parte back() podrían causar una excepción.

Para citar a Sebastian Redl sobre por qué el estándar no obliga al operator[] , el front y el back deben estar marcados como no noexcept

La política estándar de noexcept es marcar solo las funciones que no pueden o no deben fallar, pero no las que simplemente se especifican para no lanzar excepciones. En otras palabras, todas las funciones que tienen un dominio limitado (pasan los argumentos incorrectos y obtienes un comportamiento indefinido) no son noexcept , incluso cuando no están especificadas para lanzarlas.